2011-12-15 41 views
0

我有一個黑白bmp文件。它的8 BPP的圖片,大小爲2048 * 2048。我創建了一個新的WTL項目,進入「資源」 - >導入位圖 - >選擇我的bmp文件 - >給它MYBITMAPID ID使用winapi無法獲取資源位圖大小

下面是代碼:

HBITMAP bm = ::LoadBitmap(_Module.GetModuleInstance(), MAKEINTRESOURCE(MYBITMAPID)); 
ATLASSERT(bm); // <--- Ok 

SIZE sz; 
BOOL res = ::GetBitmapDimensionEx(bm, &sz); 
ATLASSERT(res); // <--- Ok 

ATLASSERT(sz.cx && sz.cy); // <--- Not Ok 

調試器說這兩個大小爲0

我試圖

HBITMAP bm = (HBITMAP)::LoadImage(_Module.GetModuleInstance(), MAKEINTRESOURCE(MYBITMAPID), IMAGE_BITMAP, 0, 0, LR_SHARED | LR_MONOCHROME); 

,得到了相同的結果。

我可以獲得CBitmap類的大小,但我想只爲這個操作使用winapi。

如何從資源加載位圖?

+1

使用[`GetObject()`](http://msdn.microsoft.com/en-us/library/aa932477.aspx)和`BITMAP`結構會帶來好運嗎? – 2011-12-15 07:18:40

+0

@AndréCaron:謝謝你,它似乎有效! – fogbit 2011-12-15 07:42:13

回答

2

WTL爲您提供的助手此:

CBitmap Bitmap = AtlLoadBitmap(MYBITMAPID); 
SIZE Extent; 
BOOL bGetSizeResult = Bitmap.GetSize(Extent); 
3

您需要使用GetObject()功能,並將它傳遞一個BITMAP結構來獲取資源的位圖的大小。