索引的彩色内存大小与原始图像

时间:2019-04-27 06:53:52

标签: colors size rgb palette indexed

在本文https://en.m.wikipedia.org/wiki/Indexed_color

它说:

调色板尺寸超过256个条目的索引彩色图像很少。实际限制是每个像素12位左右,共有4,096个不同的索引。使用索引16 bpp或更大的值不能提供索引彩色图像的特性,这是因为调色板大小(以字节为单位)大于原始图像数据本身。另外,从15 bpp起,可以使用有用的直接RGB高彩色模式。

我不理解为什么索引的16 bpp或更高的内存效率低

因为在这篇文章中还有:

索引颜色节省了大量内存,存储空间和传输时间:使用truecolor时,每个像素需要24位或3个字节。典型的640×480 VGA分辨率Truecolor未压缩图像需要640×480×3 = 921,600字节(900 KiB)。将图像颜色限制为256,每个像素仅需要8位,即每个像素1个字节,因此示例图像现在仅需要640×480×1 = 307,200字节(300 KiB),外加256×3 = 768个字节来存储调色板贴图本身(假设为RGB),约为原始尺寸的三分之一。较小的调色板(4位16色,2位4色)可以将像素打包得更多(达到六分之一或十二分之一),显然会降低色彩精度。

如果我的分辨率为640x480,并且我想使用16位调色板: 640x480x2(16位== 2字节)+ 65536(2 ^ 16)* 3(rgb) 614400 + 196608 = 811008字节

原始图像内存大小: 640x480x3(RGB) 921600字节

所以811008 <921600

如果我的分辨率为1920x1080:

原始图像:1920x1080x3 = 6220800

索引颜色:

1920x1080x2 +调色板尺寸(2 ** 16 * 3)

4147200 + 196608

4343808字节

因此再次索引的颜色在内存方面是有效的。我不明白,为什么这篇文章说它效率低下。

1 个答案:

答案 0 :(得分:0)

这实际上取决于图像的大小。如您所说,如果 b 是每个像素的字节数,而 p 是像素数,则图像数据大小 i 是:

i = p * b

颜色表大小 t 是:

t = 2 ^(b * 8)* 3

因此原始图像将与索引图像占据相同空间的点是:

p * 3 = p * b + 2 ^(b * 8)* 3

我现在将解决p:

p * 3-p * b = 2 ^(b * 8)* 3

p *(3-b)= 2 ^(b * 8)* 3

p =(2 ^(b * 8)* 3)/(3-b)

因此,对于各种字节pp,使用索引图像所能达到的最小图像大小将达到收支平衡:

1 bytepp (8 bit) - 384 pixels (like an image of 24 x 16)
1.5 bytepp (12 bit) - 8192 pixels (like an image of 128 x 64)
2 bytepp (16 bit) - 196,604 pixels (like an image of 512 x 384)
2.5 bytepp (20 bit) - 6,291,456 pixels (like an image of 3072 x 2048)
2.875 bytepp (23 bit) - 201,326,592 (like an image of 16,384 x 12,288)

如果您使用的图像小于512 x 384,则每像素索引颜色16位将比原始24位图像数据占用更多空间。

相关问题