Я хочу прочитать значения RGB, но все, что я получаю, это 0 — 255 значений в оттенках серого

Я читал файлы изображений в массивах с двумя указателями. то есть:

    BMP(char *fn, int no )
{
ifstream in(fn,ios::binary);
in.read((char*)&header,sizeof(header));
width=(int)(header[21]<<24|header[20]<<16|header[19]<<8|header[18]);
height=(int)(header[25]<<24|header[24]<<16|header[23]<<8|header[22]);
cout<<"Height:"<<height<<" Width:"<<width<<'\n';
in.read((char*)&plt,sizeof(plt));
clrs=new unsigned char[width*height];
in.read((char*)clrs,width*height);
in.close();

rollNo = no;
}

Проблема, с которой я сталкиваюсь, заключается в том, что он считывает значения цвета от 0 до 255 в соответствии с показаниями серой шкалы.

    void showOne ()
{
for ( int i = 0 ; i < width*height ; i++ )
{
int val1 = clrs[i];

cout << "\t\t index : " << i << " :\t\t" << val1 << endl;
}
}

Может кто-нибудь сказать мне, как я могу преобразовать это чтение в шестнадцатеричное значение, или все же, любым другим способом, чтобы можно было различить значения RGB?

-2

Решение

Когда изображение кодирует 24-битные данные на пиксель (истинный цвет), поле biBitCount заголовка устанавливается на 24 (вы должны проверить это).

Затем данные пикселей состоят из троек байтов BGR. В зависимости от того, что вы хотите сделать со значениями цвета, вы сохраните необработанные байты или преобразуете их в другие представления, три на три.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector