Я пытаюсь использовать WIC для загрузки изображения из файла и отображения его на экране с помощью Direct2D. Я следую за MSDN example, но у меня возникла проблема с функцией CreateBitmapFromWicBitmap().ID2D1HwndRenderTarget :: CreateBitmapFromWicBitmap()
Независимо от того, какая комбинация pixel formats я использую при создании ID2D1HwndRenderTarget
и IWICFormatConverter::Initialize()
вызова функции, не функционирует CreateBitmapFromWicBitmap()
возвращается 0x88982f80 ошибок (WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT
).
Я вызываю функцию, используя тот же ID2D1HwndRenderTarget
, который я использую для рисования. Должен ли я создать другую цель рендеринга?
В разделе комментариев в этом link кто-то написал, что CreateBitmapFromWicBitmap()
должен быть вызван объектом визуализации поверхности DXGI. Означает ли это, что эта функция просто не может использоваться с ID2D1HwndRenderTarget
?
EDIT:
void LoadBitmapFromFile(ID2D1HwndRenderTarget* target, ID2D1Bitmap** ppBitmap)
{
IWICImagingFactory* factory;
IWICBitmapDecoder* decoder;
IWICBitmapFrameDecode* frame;
IWICFormatConverter* converter;
CoInitializeEx(0, COINIT_MULTITHREADED);
CoCreateInstance(CLSID_WICImagingFactory1,
NULL,
CLSCTX_INPROC_SERVER,
IID_IWICImagingFactory,
reinterpret_cast<void**>(&factory));
factory->CreateDecoderFromFilename(L".png",
NULL,
GENERIC_READ,
WICDecodeMetadataCacheOnLoad,
&decoder);
decoder->GetFrame(0, &frame);
factory->CreateFormatConverter(&converter);
converter->Initialize(frame,
GUID_WICPixelFormat32bppPBGRA,
WICBitmapDitherTypeNone,
NULL,
0.f,
WICBitmapPaletteTypeMedianCut);
target->CreateBitmapFromWicBitmap(frame, 0, ppBitmap);
}
ID2D1HwndRenderTarget создается так:
ID2D1Factory* factory;
ID2D1HwndRenderTarget* target;
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &factory);
factory->CreateHwndRenderTarget(
D2D1::RenderTargetProperties(D2D1_RENDER_TARGET_TYPE_HARDWARE,
D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED)),
D2D1::HwndRenderTargetProperties(hwnd, D2D1::SizeU(width, height)),
&target);
Просьба показать код в [MCVE] (http://stackoverflow.com/help/mcve) образом. –