Я пытаюсь преобразовать цветной 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
.
По некоторым причинам я не получаю чистый вывод. Я прилагаю вывод, который я получаю с этим вопросом, его пятнистый и содержит белые и черные области в местах. Так что я тут не так делаю?
- Это из-за потери данных при вычислении lum или что-то не так в хранении int как char?
- Может ли bmp серой шкалы быть не 24-битным? или что-то не так в том, как я храню значения rgb после преобразования?
Любая помощь в этом будет очень ценной. Благодаря.