我想读取RGB值,但我得到的是灰度级的0到255个值

时间:2014-12-22 10:30:36

标签: c++ image-processing character-arrays

我一直在读双指针数组中的图像文件。即:

    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值区分开来?

1 个答案:

答案 0 :(得分:0)

当图像编码每像素24位数据(真彩色)时,标题的字段biBitCount设置为24(您必须检查)。

然后像素数据由BGR字节的三元组组成。根据您想要对颜色值执行的操作,您将保留原始字节或将其转换为其他表示形式,三乘三。