将颜色bmp转换为灰度bmp?

Har*_*gar 1 c c++ bmp

我正在尝试将彩色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;
}
Run Code Online (Sandbox Code Playgroud)

r,g,b数组是RGB颜色分量,我有他们在char *r,*g,*b.

由于某些原因,我没有得到干净的输出.我正在附加我对这个问题的输出,它的斑驳并且在地方包含白色和黑色区域.那么我在这里做错了什么?

  1. 是因为计算lum时数据丢失还是将int存储为char有什么问题?
  2. 灰度bmp可以不是24位吗?或者我在转换后存储rgb值的方式有问题吗?

任何有关这方面的帮助都会非常有用.谢谢.

Oli*_*rth 6

这些应该是真的unsigned char; 如果char恰好在您的平台上签名,那么此代码将无法满足您的期望.