PNG 파일을로드하고 ID2D1Bitmap으로 반환하는 간단한 함수가 있습니다. 그러나 CreateBitmapfromWicBitmap 함수를 호출하려고하면 디버그 어설 션 오류가 발생합니다. 재미있는 점은 내가 별도의 프로젝트에서 imageload 기능을 처음 만들었고 거기에서 제대로 작동한다는 것입니다. 이 두 함수는 모두 동일한 코드를 사용하고 두 번째 함수는 오류를 제공합니다.Direct2d CreateBitmapfromWICBitmap이 ATL 내에서 어설 션 오류 발생
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에 발생합니다
다음은 erroring 코드입니다.
모든 헤더와 라이브러리를 두 번 확인했으며 두 프로젝트 모두에서 동일합니다 (두 번째 프로젝트에서 일부 추가 헤더 사용).
여기에 작동하는 코드입니다 : 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 여기에 미리 정의되어 있지만, 첫 조각에서와 동일합니다.
------------------------------- 고정 -------------- --------------
세 번째로 내 렌더링 대상의 init 함수를 호출하는 것을 잊어 버렸습니다.
Whoa ... 세 번째로 내 렌더링 타겟의 init 함수를 호출하는 것을 잊어 버렸습니다. – Nooobody