为什么unsigned char为RGB像素数据?

nki*_*int 5 c++ types colors

我正在使用一些基本的计算机图形来接近c ++.

像素数据通常表示为:

unsigned char *pixels
Run Code Online (Sandbox Code Playgroud)

并且unsigned char是好的,因为它是0到255之间的值(256 = 2 ^ 8因为char是2字节而1字节是8位?).这很好,因为RGB颜色用0到255之间的数字表示.

但是...我理解这是一个单色图像,在普通图像中我有RGB,我会有3个未加掩盖的字符阵列,一个用于红色,一个用于绿色,一个用于蓝色.就像是:

unsigned char *pixels[3]
Run Code Online (Sandbox Code Playgroud)

但我从来没有发现类似的RGB像素数据

ana*_*lyg 9

RGB图像通常以交错顺序存储(R1,G1,B1,R2,G2,B2,...),因此一个指针(对R1)就足够了.

这使得处理单个像素变得有点困难:具有索引N的像素存储在pixels[3*N+0],pixels[3*N+1]pixels[3*N+2]不是仅存储red[N], green[N], blue[N].

然而,这具有允许更快访问的优点:更少的指针导致更容易的程序,提高它们的速度; 交错顺序也使内存缓存更有效.


Rem*_*emy 3

使用*pixels[3],您可以为三个颜色分量提供单独的数组,而在文件中,单个像素的三个颜色分量存储在一起。这也意味着您可以对整个图像数据块使用单个 fread()/fwrite(),