gpt4 book ai didi

c++ - 如何使用 WIC 将 ID2D1Bitmap 保存到文件中?

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:39 26 4
gpt4 key购买 nike

我在将位图保存到文件时遇到问题。我正在使用 How to save ID2D1Bitmap to PNG file作为引用,但我有一个与其中发布的错误不同的错误。

我收到错误 0x88990015 HRESULT,这意味着:所使用的资源是由不同资源域中的渲染目标创建的。

这是我的代码:

void Wnd::SavePng(LPCWSTR Path,ID2D1Bitmap* pBit) {
CComPtr<ID2D1RenderTarget> pRT;
CComPtr<IWICBitmap> pB;
CComPtr<IWICBitmapEncoder> pEncoder;
CComPtr<IWICBitmapFrameEncode> pFrame;
CComPtr<IWICStream> pStream;

WICPixelFormatGUID format = GUID_WICPixelFormat32bppPBGRA;
HRESULT Hr = m_pWICFactory->CreateBitmap(pBit->GetSize().width,pBit->GetSize().height,format,WICBitmapCacheOnLoad,&pB);

if (SUCCEEDED(Hr)) {
D2D1_RENDER_TARGET_PROPERTIES RTProps = RenderTargetProperties();
RTProps.pixelFormat = PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,D2D1_ALPHA_MODE_PREMULTIPLIED);
Hr = m_pDirect2dFactory->CreateWicBitmapRenderTarget(pB,&RTProps,&pRT);
}

if (SUCCEEDED(Hr)) {
pRT->BeginDraw();
pRT->Clear();
pRT->DrawBitmap(pBit);
Hr = pRT->EndDraw();
}

if (SUCCEEDED(Hr)) {
Hr = m_pWICFactory->CreateStream(&pStream);
}

if (SUCCEEDED(Hr)) {
Hr = pStream->InitializeFromFilename(Path,GENERIC_WRITE);
}

if (SUCCEEDED(Hr)) {
Hr = m_pWICFactory->CreateEncoder(GUID_ContainerFormatPng,NULL,&pEncoder);
}

if (SUCCEEDED(Hr)) {
Hr = pEncoder->Initialize(pStream,WICBitmapEncoderNoCache);
}

if (SUCCEEDED(Hr)) {
Hr = pEncoder->CreateNewFrame(&pFrame,NULL);
}

if (SUCCEEDED(Hr)) {
Hr = pFrame->Initialize(NULL);
}

if (SUCCEEDED(Hr)) {
Hr = pFrame->SetSize(pBit->GetSize().width,pBit->GetSize().height);
}

if (SUCCEEDED(Hr)) {
Hr = pFrame->SetPixelFormat(&format);
}

if (SUCCEEDED(Hr)) {
Hr = pFrame->WriteSource(pB,NULL);
}

if (SUCCEEDED(Hr)) {
Hr = pFrame->Commit();
}

if (SUCCEEDED(Hr)) {
Hr = pEncoder->Commit();
}
}

我知道您不能将另一家工厂生产的资源与另一家工厂一起使用,但必须有一种方法来实现这一点。

最佳答案

您对资源亲和性的理解不够。资源是特定于设备而不是特定于工厂的。是的,它们也往往是特定于工厂的,但关键是设备的特定性。

在您的示例中,您传入由其他渲染目标创建的位图,然后将其传递给不同渲染目标的 DrawBitmap 方法。您只能绘制由同一渲染目标创建的位图。这确保了位图和渲染目标(源和目标)在同一个资源域(地址空间)中。

关于c++ - 如何使用 WIC 将 ID2D1Bitmap 保存到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14261226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com