怎样判断BMP是否是256色?

bigmm 2003-05-10 03:58:36
怎样判断BMP是否是256色?(程序)
...全文
87 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigmm 2003-05-10
  • 打赏
  • 举报
回复
谢了!!
bigmm 2003-05-10
  • 打赏
  • 举报
回复
怎么没有24色的?
herrycsdn 2003-05-10
  • 打赏
  • 举报
回复
The BITMAPCOREHEADER structure contains information about the dimensions and color format of a device-independent bitmap (DIB).

typedef struct tagBITMAPCOREHEADER { // bmch
DWORD bcSize;
WORD bcWidth;
WORD bcHeight;
WORD bcPlanes;
WORD bcBitCount;
} BITMAPCOREHEADER

bcBitCount是8,则为256色
lazio88 2003-05-10
  • 打赏
  • 举报
回复
/*************************************************************************
*
* 函数名称:
* DIBNumColors()
*
* 参数:
* LPSTR lpbi - 指向DIB对象的指针
*
* 返回值:
* WORD - 返回调色板中颜色的种数
*
* 说明:
* 该函数返回DIB中调色板的颜色的种数。对于单色位图,返回2,
* 对于16色位图,返回16,对于256色位图,返回256;对于真彩色
* 位图(24位),没有调色板,返回0。
*
************************************************************************/
WORD WINAPI DIBNumColors(LPSTR lpbi)
{
WORD wBitCount;

// 对于Windows的DIB, 实际颜色的数目可以比象素的位数要少。
// 对于这种情况,则返回一个近似的数值。

// 判断是否是WIN3.0 DIB
if (IS_WIN30_DIB(lpbi))
{
DWORD dwClrUsed;

// 读取dwClrUsed值
dwClrUsed = ((LPBITMAPINFOHEADER)lpbi)->biClrUsed;

if (dwClrUsed != 0)
{
// 如果dwClrUsed(实际用到的颜色数)不为0,直接返回该值
return (WORD)dwClrUsed;
}
}

// 读取象素的位数
if (IS_WIN30_DIB(lpbi))
{
// 读取biBitCount值
wBitCount = ((LPBITMAPINFOHEADER)lpbi)->biBitCount;
}
else
{
// 读取biBitCount值
wBitCount = ((LPBITMAPCOREHEADER)lpbi)->bcBitCount;
}

// 按照象素的位数计算颜色数目
switch (wBitCount)
{
case 1:
return 2;

case 4:
return 16;

case 8:
return 256;

default:
return 0;
}
}
guopo 2003-05-10
  • 打赏
  • 举报
回复
看看信息头文件,有一个字段能判断的。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧