비트 맵을 파일로 저장하는 데 문제가 있습니다. 나는 참조로 How to save ID2D1Bitmap to PNG file을 사용하고 있지만, 나는 그것에 게시 된 것보다 다른 오류가 있습니다.WIC를 사용하여 ID2D1Bitmap을 파일에 저장하는 방법은 무엇입니까?
다음과 같은 오류 메시지가 나타납니다. 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();
}
}
당신이 서로 다른 공장에 의해 만들어 자원을 사용할 수 없다는 것을 이해하지만,이 일을 할 수있는 방법이 있어야한다.