Следующий код должен из интерфейса ID2D1Bitmap получить GDI HBITMAP
LRESULT CImageBrowser::OnGetHBitmap()
{
D2D1_SIZE_F size = m_Bitmap.GetSize();
ID2D1FactoryPtr Factory;
ID2D1Factory1Ptr Factory1;
m_Bitmap.GetFactoty(&Factory);
Check_Com(Factory->QueryInterface(IID_PPV_ARGS(&Factory1)));
ID2D1DCRenderTargetPtr DCRenderTarget;
D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(
D2D1_RENDER_TARGET_TYPE_DEFAULT,
D2D1::PixelFormat(
DXGI_FORMAT_B8G8R8A8_UNORM,
D2D1_ALPHA_MODE_IGNORE),
0,
0,
D2D1_RENDER_TARGET_USAGE_NONE,
D2D1_FEATURE_LEVEL_DEFAULT
);
Check_Com(
Factory1->CreateDCRenderTarget(
&props,
&DCRenderTarget
)
);
HDC hDCSource;
Check_Win(hDCSource = CreateCompatibleDC(nullptr));
MVRECT mvRect;
mvRect.right = (int)size.width;
mvRect.bottom = (int)size.height;
Check_Com(DCRenderTarget->BindDC(hDCSource, mvRect));
D2D1_RECT_F rect = D2D1::RectF(0.0, 0.0, (float)size.width, (float)size.height);
DCRenderTarget->BeginDraw();
DCRenderTarget->DrawBitmap(m_Bitmap, rect);
Check_Com(DCRenderTarget->EndDraw());
HDC hDCResult;
Check_Win(hDCResult = CreateCompatibleDC(nullptr));
HBITMAP hBitmap;
Check_Win(hBitmap = CreateCompatibleBitmap(nullptr,(int)size.width,(int)size.height));
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hDCResult, hBitmap);
BitBlt(
hDCResult,
0,
0,
(int)size.width,
(int)size.height,
hDCSource,
0,
0,
SRCCOPY
);
SelectObject(hDCResult, hOldBitmap);
DeleteDC(hDCResult);
DeleteDC(hDCResult);
return (HRESULT)hBitmap;
}
В выделенной строке жирным шрифтом возникает сообщение с кодом 0x88990015. Моя программа дает сообщение, полученное с помощью функции FormatMessage, следующее "Ресурс был создан с использованием неправильной однобуферной прорисовкой.
Еще что интересно, что на сайте Микрософт сообщение ошибки с таким же кодом дается такое "Используемый ресурс был создан целевым объектом отрисовки в другом домене ресурсов."
Коды ошибок Direct2D
Как бороться с этой ошибкой