WICを使用してファイルから画像を読み込み、Direct2Dで画面に表示しようとしています。 MSDN exampleに従っていますが、CreateBitmapFromWicBitmap()関数に問題が発生しました。私はID2D1HwndRenderTarget
作成とIWICFormatConverter::Initialize()
関数呼び出し中に使用pixel formatsの組み合わせID2D1HwndRenderTarget :: CreateBitmapFromWicBitmap()
に関係なく、CreateBitmapFromWicBitmap()
戻り0x88982f80エラー(WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT
)として機能します。
私は描画に使用するのと同じID2D1HwndRenderTarget
を使用して関数を呼び出します。別のレンダーターゲットを作成する必要がありますか?
このlinkのコメントセクションで、DXGIサーフェスレンダーターゲットによってCreateBitmapFromWicBitmap()
が呼び出されるべきだと誰かが書きました。この機能は単に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)の方法でコードを表示してください。 –