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'
我是对的吗?
答案 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