Как сохранить ID2D1Bitmap в файл с помощью WIC?
У меня проблема с сохранением растрового изображения в файл. Я'м используюКак сохранить ID2D1Bitmap в файл PNG в качестве ссылки, но у меня есть другая ошибка, чем та, которая размещена в этом.
Я получаю ошибку 0x88990015 HRESULT, что означает: использованный ресурс был создан целью рендеринга в другом домене ресурсов.
Вот'мой код:
void Wnd::SavePng(LPCWSTR Path,ID2D1Bitmap* pBit) {
CComPtr pRT;
CComPtr pB;
CComPtr pEncoder;
CComPtr pFrame;
CComPtr 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();
}
}
Я понимаю, что вы можетеНе используйте ресурсы, сделанные другой фабрикой, с другой, но должен быть способ сделать эту работу.