Я пытаюсь нарисовать растровое изображение 128x128 на окне с Direct2D. Однако ничего не отображается, и EndDraw()
не возвращает никаких ошибок.Direct2D отказывается рисовать растровое изображение на окне, не работает
Это мой 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;
}
Я использую C++ с родной WinAPI в Visual Studio 2010.
Я не знаю, DirectX, но в графике, когда вы ничего не видите вообще, вполне возможно, что у вас есть «двойник буфера ", и вы не меняете буфер. Это так? – Shahbaz
@Shahbaz Я не думаю, что это так ... Я рисую еще один сплошной цветной прямоугольник, который хорошо выглядит. Я думаю, Direct2D позаботится об этом, так как предполагается, что он будет использоваться для настольных интерфейсов, а не для сложного графического рендеринга, для которого используется Direct3D. – Joshua