设为首页 加入收藏

TOP

BMP图像的灰度化---C++实现 (二)
2014-11-23 20:00:40 来源: 作者: 【 】 浏览:12
Tags:BMP 图像 ---C 实现
zeof(RGBQUAD)*256; bitmapFileHeader->bfSize=bitmapFileHeader->bfOffBits+bitmapInfoHeader->biSizeImage; //写数据 BYTE** newImageData=new BYTE*[bitmapInfoHeader->biHeight]; for (int i=0;ibiHeight;i++) { newImageData[i]=new BYTE[destImageLineByteCount]; } for(int i=0;ibiHeight;i++) { for(int j=0;jbiHeight;i++) { for(int j=0;jbiHeight;i++) { for(int j=0;j

int srcImageLineByteCount=(((bitmapInfoHeader->biWidth*24)+31)/32)*4;
int destImageLineByteCount=(((bitmapInfoHeader->biWidth)*8+31)/32)*4;


提醒:这里没有进行指针的释放。。。

这两行其实也可以用上一篇文章的WIDTHBYTES(bitmapInfoHeader->biWidth*24)和WIDTHBYTES(bitmapInfoHeader->biWidth*8)

有些地方也用( (bi.biWidth+3)/4 ) * 4和((bi.biWidth*3+3)/4)*4这样的表达式。。原理都是一样的。其实( (bi.biWidth+3)/4 ) * 4写成( (bi.biWidth*1+3)/4 ) * 4估计会好理解吧。。

因为BMP图像每个像素都是有三个RGB分量组成(24位,32位也就是多了个Alpha),而在灰度图像中每个像素只是一个灰度值,从代码:newImageData[i][j]=(int)((float)oldImageData[i][j*3]*0.114+(float)oldImageData[i][j*3+1]*0.587+(float)oldImageData[i][3*j+2]*0.299); 可看出,每个灰度值都是由原来的彩色图像的每个RGB分量通过一定的公式计算得来的。因此灰度图像和原来的彩色图像虽然在宽度和高度(像素单位)是一样的,但是因为组成不同,所以每行的字节数就是不一样的。。

至于其他的就不多说了,在前面WIDTHBYTES位图操作函数详解和BMP文件读写复习---C++实现文章中都说的差不多了,如果还有不明白的可以留言。。

效果如下:

原图像:

\

灰度图像:


\

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇BMP图像旋转----C++实现 下一篇hdu2594 Simpsons’ Hidden Talen..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)
·MySQL 数据类型:从 (2025-12-26 18:20:03)
·Linux Shell脚本教程 (2025-12-26 17:51:10)
·Qt教程,Qt5编程入门 (2025-12-26 17:51:07)