24位图图像和16位图图像中的RGB颜色

时间:2017-10-20 11:12:15

标签: c++ image colors bitmap

1) 我想知道24位图图像中红色的值。

像素由24位表示,其中红色,绿色和蓝色(RGB)值各有8位

假设我打开24位图图像,并将数据保存在unsigned char Array A中。

i,e)(A [0],A [1],A [2])是24位图图像的第一个像素值。

那么红色的价值是多少?

我认为24位图图像颜色顺序(?)是' RGB',所以A [0]是红色值。我是对的吗?

2)  在16位图图像中,像素由16位表示,其中红色,绿色和蓝色(RGB)值各有5位。

假设我打开16位图图像,并将数据保存在无符号短阵列B中。

i,e)B [0]是16位图图像的第一个像素值。

在这种情况下,我想知道红色的值。

我认为最后5位,我,e)' A [0]& 31'是蓝色的值,因为16位图图像的颜色顺序(?)是' RGB'

我是对的吗?

1 个答案:

答案 0 :(得分:0)

位图在源代码中很难处理以检索其数据。首先必须解析文件的标题,并从其标题中解析它及其数据,以了解您正在使用的位图图像类型。位图存储了大量信息。从逻辑上讲,如果位图图像是24位而没有透明度值,特别是RGB类型,则需要知道图像是否被压缩,以及通过什么压缩方法以及文件的其他属性,如调色板信息,图标信息等。所以你知道在哪个特定文件中找到实际的像素数据。提取原始数据后,您需要知道信息的存储方式。以下是它可能变得棘手:它可能是RGB图像,但数据可以以直接RGB顺序存储在文件中,或者可以反转BGR。之后,问题是知道图像数据的存储方向,以及是否需要垂直,水平或两者翻转。除此之外,如果颜色数据的顺序正确并且图像处于正确的方向而没有压缩,那么对于无符号字符值,它应该毫无疑问地构造为:

  

位图24位 - RGB的24/3每通道8位或每通道1位。   由于unsigned char的内存宽度为1个字节,因此每个字节都在       适当的顺序代表每个颜色通道。请考虑以下事项:


// Considering data is in RGB order:
unsigned char colorData[3];      // Integer Base Range
colorData[0] = red byte          [0, 255]
colorData[1] = green byte        [0, 255]
colorData[2] = blue byte         [0, 255]

至于位图内部文件结构,这里是解析其数据的一个很好的来源:bmp