Direct2D を使用して 128x128 ビットマップをウィンドウに描画しようとしています。ただし、何も表示されEndDraw()
ず、エラーも返されません。
これは私のWM_PAINT
コードです:
case WM_PAINT:
D2D1_RECT_F testd2dbuttonrect;
mainwRT->BeginDraw();
mainwRT->SetTransform( D2D1::Matrix3x2F::Identity() );
testd2dbutton.pd2drectgm->GetRect( &testd2dbuttonrect );
mainwRT->FillRectangle( &testd2dbuttonrect, pSolidBrush );
//This is where I'm trying to draw my bitmap
mainwRT->FillRectangle( D2D1::RectF(0.0f,0.0f,127.0f,127.0f), pBgndBrush );
errmsg = mainwRT->EndDraw();
if( !SUCCEEDED(errmsg) )
printf("EndDraw() error: %d\r\n", errmsg );
break;
Visual Studio リソースから読み込んだビットマップ データがごみである可能性があると思われますが、何も失敗せず、エラー メッセージが表示されるため、知る方法がありません。ID2D1Bitmap
これは、リソースからをロードするために使用したコードです。
int LoadBitmapFromResource( IWICImagingFactory *pImageFactory, ID2D1RenderTarget *pRT, int resID, ID2D1Bitmap **ppD2DBitmap )
{
int errmsg;
HBITMAP hbitmap;
WICBitmapAlphaChannelOption wicalpha;
IWICBitmap *pwicbitmap;
IWICBitmapSource *pconvertedwicbitmap;
IWICFormatConverter *pConverter;
ID2D1Factory *d2dfactory;
D2D1_BITMAP_PROPERTIES d2dbp;
D2D1_PIXEL_FORMAT d2dpf;
FLOAT dpiX;
FLOAT dpiY;
hbitmap = LoadBitmap( GetModuleHandle(NULL), MAKEINTRESOURCEW(resID) );
wicalpha = WICBitmapUseAlpha;
errmsg = pImageFactory->CreateBitmapFromHBITMAP( hbitmap, NULL, wicalpha, &pwicbitmap );
if( !SUCCEEDED(errmsg) )
{
printf("LoadBitmapFromResource::CreateBitmapFromHBITMAP() error: %x\r\n", errmsg );
return errmsg;
}
errmsg = pImageFactory->CreateFormatConverter( &pConverter );
if( !SUCCEEDED(errmsg) )
{
printf("LoadBitmapFromResource::CreateFormatConverter() error: %x\r\n", errmsg );
return errmsg;
}
d2dpf.format = DXGI_FORMAT_B8G8R8A8_UNORM;
d2dpf.alphaMode = D2D1_ALPHA_MODE_PREMULTIPLIED;
pRT->GetFactory( &d2dfactory );
d2dfactory->GetDesktopDpi( &dpiX, &dpiY );
d2dbp.pixelFormat = d2dpf;
d2dbp.dpiX = dpiX;
d2dbp.dpiY = dpiY;
pConverter->Initialize( pwicbitmap, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, NULL, 0.0f, WICBitmapPaletteTypeMedianCut );
if( !SUCCEEDED(errmsg) )
{
printf("LoadBitmapFromResource::Initialize() error: %x\r\n", errmsg );
return errmsg;
}
errmsg = WICConvertBitmapSource( GUID_WICPixelFormat32bppPBGRA, pwicbitmap, &pconvertedwicbitmap );
if( !SUCCEEDED(errmsg) )
{
printf("LoadBitmapFromResource::WICConvertBitmapSource() error: %x\r\n", errmsg );
return errmsg;
}
errmsg = pRT->CreateBitmapFromWicBitmap( pconvertedwicbitmap, &d2dbp, ppD2DBitmap );
if( !SUCCEEDED(errmsg) )
{
printf("LoadBitmapFromResource::CreateBitmapFromWicBitmap() error: %x\r\n", errmsg );
return errmsg;
}
pConverter->Release();
pwicbitmap->Release();
DeleteObject( hbitmap );
return 0;
}
Visual Studio 2010 のネイティブ WinAPI で C++ を使用しています。