Следующий код должен из интерфейса 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
Как бороться с этой ошибкой
Здравствуйте, Melamed, Вы писали:
M>Как бороться с этой ошибкой
Ошибка с кодом
0x88990015 ("
Ресурс был создан с использованием неправильной однобуферной прорисовкой" или "
Используемый ресурс был создан целевым объектом отрисовки в другом домене ресурсов") связана с тем, что вы пытаетесь создать ресурс с использованием объекта отрисовки (render target), который был создан в другом домене ресурсов.
Домен ресурсов в Direct2D представляет собой контекст, в котором создаются и используются ресурсы (например, битмапы и др.). Ваша ошибка может возникнуть, если объект
m_Bitmap был создан в одном домене ресурсов, а объект
DCRenderTarget был создан в другом.
Чтобы решить эту проблему, убедитесь, что объекты
m_Bitmap и
DCRenderTarget были созданы в одном и том же домене ресурсов.
...<< Dementor 1.4.3 ✪ Lets Play a Game ⚁⚁⚂⚃⚅>>