【发布时间】:2018-04-01 13:20:56
【问题描述】:
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 位图图像,并将数据保存在 unsigned short Array B 中。
i,e) B[0] 是 16 位图图像的第一个像素值。
在这种情况下,我想知道红色的值。
我认为最后 5 位,即 'A[0] & 31' 是蓝色的值,因为 16 位图图像的颜色顺序(?)是 'RGB'
我说的对吗?
【问题讨论】:
-
你为什么在猜测而不是使用库?
-
蓝色是最不重要的位,红色是最重要的位。机器的endian-ness起了作用,如果图像是在big-endian机器上生成的,可能性越来越小,那么改用BGR就方便了。所以 A[0] 通常是蓝色的,对于 16bpp,你必须使用 0x1f。请注意,565 对于 16bpp 来说并不少见。明智的做法是忽略所有这些并仅使用 32bpp,通过使用 int* 寻址像素,字节顺序细节会消失。