我正在尝试将彩色BMP文件转换为灰度BMP文件.输入bmp是24位,我正在生产相同的24位bmp在输出,只是这次在灰阶。
我使用的代码是
for(int x = 0; x < max; x++)
{
int lum;
lum = (r[x]*0.30) + (g[x]*0.59) + (b[x]*0.11);
r[x] = lum;
g[x] = lum;
b[x] = lum;
}r、g、b数组是RGB颜色组件,我将它们放在char *r,*g,*b中。
出于某些原因,我没有得到一个干净的输出。我是附加的输出,我得到了这个问题,它的零碎,并包含白色和黑色的区域在棕榈树。那我在这里做错什么了?
在这方面的任何帮助都会很有见地。谢谢。
发布于 2010-11-10 18:20:32
这些代码应该是unsigned char;如果char碰巧是在您的平台上签名的,那么这段代码将无法实现您的期望。
发布于 2010-11-10 18:20:33
您需要将计算的输出夹在0,255中。你的计算看起来还不错,但确定一下总是好的。
还要确保r,g,b数组是unsigned char。你可以在int中进行大量的符号/无符号混合(由于2的补码溢出覆盖错误),但是当你转换为浮动时,符号必须是正确的。
https://stackoverflow.com/questions/4147639
复制相似问题