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

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

问题描述:

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

像素由24位数据,其中,存在用于每一个红色,绿色和蓝色(RGB)的8位值

假设我打开24位图图像,并保存在无符号字符阵列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位,I,E) 'A [0] & 31' 是自16位图图像的颜色顺序(θ)为 'RGB'

我是蓝颜色的值对?

+1

你为什么猜测,而不是使用库? – stark

+1

蓝色是最不重要的位,最多红色。如果图像是在大型机器上生成的,机器的排序会起到一定的作用,因此越来越不太可能,那么就可以方便地讨论BGR。所以A [0]通常有蓝色,对于16bpp你必须使用0x1f。请注意,对于16bpp,565并不少见。忽略所有这些并且只使用32bpp是明智的,通过用int *来寻址像素,字节细节消失。 –

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

位图的24位 - 第24/3号为RGB给每个通道8bit或每个通道1byte。 由于无符号字符的内存宽度为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] 

至于位图文件的内部结构(S)这里是分析其数据的良好来源:bmp