【发布时间】:2016-07-07 15:23:39
【问题描述】:
我可以使用 GetObject( ... ) 从 HBITMAP 句柄中获取 BITMAP 结构
HBITMAP hSrc = // source image
BITMAP bDst;
GetObject(hSrc, sizeof(BITMAP), &bDst);
...
但想知道是否有一种方法可以计算该图像的内存使用量(或占用空间?)。
我不想显示内存大小超过 xyz 的图像。
typedef struct tagBITMAP
{
LONG bmType;
LONG bmWidth;
LONG bmHeight;
LONG bmWidthBytes;
WORD bmPlanes;
WORD bmBitsPixel;
LPVOID bmBits;
} BITMAP, *PBITMAP, NEAR *NPBITMAP, FAR *LPBITMAP;
LPVOID bmBits;包含所有数据,但是如何计算 void* 指针的大小?
【问题讨论】:
-
你有使用的像素数(就像你有宽度和高度一样),然后你有每个像素的位数。你只需要一些简单的乘法。
-
大概是 width * height * bitsperpixel / 8。这没什么意义,当你得到这个信息时,损坏已经完成,你已经加载了位图并用完了对它的记忆。所以你不妨展示一下。
-
@JoachimPileborg,你说
bmWidth*bmHeight*bmBitsPixel?但是,bmPlanes和bmWidthBytes适合在哪里,或者它们不参与实际大小? -
@HansPassant,'8' 来自哪里?
-
@SimonGoodman 每字节 8 位。而且结构中有些信息是多余的。
标签: c++ visual-c++ bitmap