2011-12-15 39 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结构来获取资源的位图的大小。