我一直在读双指针数组中的图像文件。即:
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值区分开来?
答案 0 :(得分:0)
当图像编码每像素24位数据(真彩色)时,标题的字段biBitCount设置为24(您必须检查)。
然后像素数据由BGR字节的三元组组成。根据您想要对颜色值执行的操作,您将保留原始字节或将其转换为其他表示形式,三乘三。