来源:http://blog.youkuaiyun.com/sunny3106/archive/2007/08/27/1761106.aspx
/****************************************************************
*
* 函数名称: Convert256toGray(LPSTR lpDIB,LPSTR lpDIBBits,
long lWidth,long lHeight)
* 参数: LPSTR lpDIB 指向dib的指针
LPSTR lpDIBBits 指向dib数据的指针
long lWidth 图像宽度
long lHeight 图像高度
* 返回值: bool
* 功能: 将256色位图转化为灰度图
*
***************************************************************/
bool Convert256toGray(LPSTR lpDIB,LPSTR lpDIBBits,
long lWidth,long lHeight)
{
BYTE * lpSrc; // 指向DIB象素的指针
LONG lLineBytes; // 图像每行的字节数
LPBITMAPINFO lpbmi; // 指向BITMAPINFO结构的指针(Win3.0)
LPBITMAPCOREINFO lpbmc; // 指向BITMAPCOREINFO结构的指针
lpbmi = (LPBITMAPINFO)lpDIB; // 获取指向BITMAPINFO结构的指针(Win3.0)
lpbmc = (LPBITMAPCOREINFO)lpDIB; // 获取指向BITMAPCOREINFO结构的指针
BYTE bMap[256]; // 灰度映射表
// 计算灰度映射表(保存各个颜色的灰度值),并更新DIB调色板
int i,j;
for (i = 0; i < 256; i ++)
{
// 计算该颜色对应的灰度值
/*
bMap[i] = (BYTE)(0.299 * lpbmi->bmiColors[i].rgbRed +
&nb

该博客介绍了如何将256色位图和24位真彩色位图转换为灰度图像。通过计算每个像素的红、绿、蓝分量的加权平均值,生成灰度映射表,然后更新位图的调色板和像素数据。同时,还提供了一个优化算法以提高转换效率。
最低0.47元/天 解锁文章
5581

被折叠的 条评论
为什么被折叠?



