c - LoadImage 的工作方式因获胜颜色设置而异

标签 c windows gdi

嗨, 我正在使用 loadImage 加载一个 24 位 bmp 文件,然后尝试获取 bmp 信息

 hBitmap = (HBITMAP)LoadImage(NULL, "logo.bmp", IMAGE_BITMAP, 0, 0,
                LR_LOADFROMFILE | LR_DEFAULTSIZE)
 GetObject( hBitmap, sizeof(BITMAP), &bm );

当我对 Windows 颜色显示设置 32 hi color 执行相同的操作时,我得到了以下值 bmBitsPixel = 32 但如果我将 Windows 颜色显示设置为 16 比我得到的 bmBitsPixel = 16

谁能解释一下这是什么意思。 如果我使用以下公式计算 bmp 的大小而不是 bmp 的大小取决于窗口颜色设置。

大小 = bmWidth * bmHeight * bmBitsPixel/8

感谢和问候

最佳答案

HBITMAP 是一个 device-dependent bitmap : 它的内部表示取决于屏幕的颜色格式。

相应地,如果您将显示颜色格式设置为每像素 32 位 (bpp),那么您的位图将使用 32 bpp。如果您将颜色格式切换为 16 bpp,位图将跟随并使用 16 bpp。

您的公式是正确的,在计算位图大小时必须考虑 bmBitsPixel

关于c - LoadImage 的工作方式因获胜颜色设置而异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4022107/

相关文章:

c - 这段代码的原型(prototype)声明是什么?

c# - ?在我的文件名中

c - Windows GDI : Difference Between a Pattern Brush & BitBlt of a Bitmap

c - 在 GDI 中绘制文本并使其适合矩形?

c++ - 如何为“(1+3 * ( 5/4)) 之类的字符串编写求值器并获得数值结果

C中可以通过函数指针调用静态函数吗?

Char 矩阵总是打印最后一个元素

windows - 是否有人在使用他们会推荐给其他人的第三方 Windows 注册表编辑器?

java - SSL Socket OutputStream Write Slow only on Windows

c++ - 奇怪的 Unresolved external 错误