我試圖用Direct2D在窗口上繪製128x128位圖。然而,什麼也沒有顯示,並且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;
}
我在Visual Studio 2010
我不知道的DirectX,但在圖形,當你看不到任何東西的話,那有可能是你有「雙緩衝區「啓用,你不交換緩衝區。是這樣嗎? – Shahbaz 2012-04-08 11:31:12
@Shahbaz我不認爲是這樣的......我正在繪製另一個純色矩形,顯示出來很好。我認爲Direct2D會照顧它,因爲它應該用於桌面界面,而不是使用Direct3D的複雜圖形渲染。 – Joshua 2012-04-08 12:25:41