我正在尝试将彩色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
中。
由于某些原因,我没有得到干净的输出。我正在附加我对这个问题的输出,它的斑驳并且在地方包含白色和黑色区域。那么我在这里做错了什么?
任何有关这方面的帮助都会受到很多关注。感谢。
答案 0 :(得分:6)
这些应该是unsigned char
;如果恰好在您的平台上签署char
,那么此代码将无法满足您的期望。
答案 1 :(得分:2)
您需要将计算的输出钳位在[0,255]中。你的计算看起来没问题,但确定总是好的。
还要确保r,g,b数组为unsigned char
。你可以在int中使用大量的有符号/无符号混合(由于2的补码溢出覆盖了错误)但是当你转换为float时,符号必须是正确的。