Ich versuche, eine ID2D1Bitmap aus einer Bitmap-Ressource zu laden. Um dies zu tun, konsultierte ich eine MSDN guide, die mir sagte, die Windows Imaging-Komponente (IWIC) zu verwenden, um das Bild zu verarbeiten, bevor Direct2D es verwendet.IWICImagingFactory :: CreateDecoderFromStream() schlägt fehl, Fehlermeldung ist nicht hilfreich
Allerdings schlägt es fehl, wenn ich CreateDecoderFromStream()
aufrufen, und es gibt eine seltsame Fehlermeldung zurück - 0x88982f50
- das sagt mir nichts. Ich habe Google durchsucht und DirectX Error Lookup verwendet. Die DirectX-Fehler Lookup Tool sagt mir nur das:
HRESULT: 0x88982f50 (2291674960)
Name: Unknown
Description: n/a
Severity code: Failed
Facility Code: FACILITY_DWRITE (2200)
Error Code: 0x2f50 (12112)
Dies ist der Code, den ich mit einem ID2D1Bitmap von einer Ressource zu versuchen und zu laden:
int LoadBitmapFromResource(IWICImagingFactory *pIWICFactory, ID2D1RenderTarget *pRT, int resID, ID2D1Bitmap **ppD2DBitmap)
{
int errmsg;
HRSRC hbmp;
HGLOBAL hbmpdata;
void *pbmp; //system memory pointer to bitmap resource
DWORD bmpsize;
IWICStream *pStream;
IWICBitmapDecoder *pbmpdecoder;
IWICBitmapFrameDecode *pSource;
IWICFormatConverter *pConverter;
hbmp = FindResourceW(GetModuleHandleW(NULL), MAKEINTRESOURCEW(resID), RT_BITMAP);
if(NULL == hbmp)
{
printf("LoadBitmapFromResource::FindResourceW() error: %d\r\n", GetLastError());
return GetLastError();
}
hbmpdata = LoadResource(GetModuleHandleW(NULL), hbmp);
if(NULL == hbmpdata)
{
printf("LoadBitmapFromResource::LoadResource() error: %d\r\n", GetLastError());
return GetLastError();
}
pbmp = LockResource(hbmpdata);
if(NULL == pbmp)
{
printf("LoadBitmapFromResource::LockResource() error: %d\r\n", GetLastError());
return GetLastError();
}
bmpsize = SizeofResource(GetModuleHandleW(NULL), hbmp);
if(NULL == bmpsize)
{
printf("LoadBitmapFromResource::SizeofResource() error: %d\r\n", GetLastError());
return GetLastError();
}
errmsg = pIWICFactory->CreateStream(&pStream);
if(!SUCCEEDED(errmsg))
{
printf("LoadBitmapFromResource::CreateStream() error: %x\r\n", errmsg);
return errmsg;
}
errmsg = pStream->InitializeFromMemory((BYTE*)pbmp, bmpsize);
if(!SUCCEEDED(errmsg))
{
printf("LoadBitmapFromResource::InitializeFromMemory() error: %x\r\n", errmsg);
return errmsg;
}
errmsg = pIWICFactory->CreateDecoderFromStream(pStream, NULL, WICDecodeMetadataCacheOnLoad, &pbmpdecoder);
if(!SUCCEEDED(errmsg))
{
printf("LoadBitmapFromResource::CreateDecoderFromStream() error: %x\r\n", errmsg);
return errmsg;
}
errmsg = pbmpdecoder->GetFrame(0, &pSource);
if(!SUCCEEDED(errmsg))
{
printf("LoadBitmapFromResource::GetFrame() error: %x\r\n", errmsg);
return errmsg;
}
errmsg = pIWICFactory->CreateFormatConverter(&pConverter);
if(!SUCCEEDED(errmsg))
{
printf("LoadBitmapFromResource::CreateFormatConverter() error: %x\r\n", errmsg);
return errmsg;
}
errmsg = pConverter->Initialize(pSource, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, NULL, 0.0f, WICBitmapPaletteTypeMedianCut);
if(!SUCCEEDED(errmsg))
{
printf("LoadBitmapFromResource::Initialize() error: %x\r\n", errmsg);
return errmsg;
}
errmsg = pRT->CreateBitmapFromWicBitmap(pConverter, ppD2DBitmap);
if(!SUCCEEDED(errmsg))
{
printf("LoadBitmapFromResource::CreateBitmapFromWicBitmap() error: %x\r\n", errmsg);
return errmsg;
}
pConverter->Release();
pSource->Release();
pbmpdecoder->Release();
pStream->Release();
return 0;
}
Es ist ein WIC-Fehler zu tun. Es entspricht "WINCODEC_ERR_COMPONENTNOTFOUND". [Hier] (http://blogs.msdn.com/b/xwebsupport/archive/2009/09/29/expression-web-studio-2-crashes-on-setup-exception-has-beth-by-thrown-by- Sie können eine Diskussion finden, die für Sie hilfreich sein kann. –
... Ich verstehe ... Ich muss einen anderen Weg finden um eine ID2D1Bitmap aus einer Ressource zu erstellen. – Joshua