PngファイルをロードしてID2D1Bitmapとして返す単純な関数があります。ただし、CreateBitmapfromWicBitmap関数を呼び出そうとすると、デバッグアサートエラーが発生します。面白いことに、私は最初に別のプロジェクトでimageload関数を作成しましたが、そこでは正常に機能します。これらの関数は両方とも同じコードを持っていますが、2番目の関数はエラーを出します。
エラーコードは次のとおりです。
ID2D1Bitmap* Wnd::LoadPng(LPCWSTR Path) {
CComPtr<IWICBitmapDecoder> pDecoder;
CComPtr<IWICBitmapFrameDecode> pFrame;
CComPtr<ID2D1Bitmap> pBit;
CComPtr<IWICFormatConverter> pConv;
HRESULT Hr;
Hr = m_pWICFactory->CreateDecoderFromFilename(Path,NULL,GENERIC_READ,WICDecodeMetadataCacheOnDemand,&pDecoder);
if (SUCCEEDED(Hr)) {
Hr = m_pWICFactory->CreateFormatConverter(&pConv);
}
if (SUCCEEDED(Hr)) {
Hr = pDecoder->GetFrame(0,&pFrame);
}
if (SUCCEEDED(Hr)) {
Hr = pConv->Initialize(pFrame,GUID_WICPixelFormat32bppPBGRA,WICBitmapDitherTypeNone,0,0.f,WICBitmapPaletteTypeCustom);
}
if (SUCCEEDED(Hr)) {
Hr = m_pRT->CreateBitmapFromWicBitmap(pConv,0,&pBit);
}
return pBit;
}
エラーは、関数_NoAddRefReleaseOnCComPtrの182行目のatlcomcli.hで発生します。
すべてのヘッダーとライブラリを再確認しましたが、両方のプロジェクトで同じです(2番目のプロジェクトにいくつかの追加のヘッダーがあります)。
動作するコードは次のとおりです。
CComPtr<IWICFormatConverter> Conv;
m_pWICFactory->CreateFormatConverter(&Conv);
CComPtr<IWICBitmapFrameDecode> Frame;
m_pDecoder->GetFrame(0,&Frame);
Frame->GetSize(&W,&H);
Conv->Initialize(Frame,GUID_WICPixelFormat32bppPBGRA,WICBitmapDitherTypeNone,0,0.f,WICBitmapPaletteTypeCustom);
CComPtr<ID2D1Bitmap> Bit;
Hr = m_pRT->CreateBitmapFromWicBitmap(Conv,0,&Bit);
m_pBitmap.push_back(Bit);
BitmapDecoderはここで事前定義されていますが、最初のスニペットとまったく同じです。
- - - - - - - - - - - - - - - - 修繕 - - - - - - - - - ----------
3回目は、rendertargetのinit関数を呼び出すのを忘れました。