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



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

它说:

调色板大小超过 256 个条目的索引彩色图像很少见。实际限制约为每像素 12 位,4,096 个不同的索引。使用索引 16 bpp 或更高并不能提供索引彩色图像性质的好处,因为以字节为单位的调色板大小大于原始图像数据本身。此外,有用的直接 RGB 高色模式可以在 15 bpp 及以上使用。

我不知道为什么索引的 16 bpp 或更多在内存方面效率低下

因为在本文中还有这个:

索引颜色可节省大量内存、存储空间和传输时间:使用真彩色时,每个像素需要 24 位或 3 个字节。典型的 640×480 VGA 分辨率真彩色未压缩图像需要 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 = 6 220 800

索引颜色:

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

4147200 + 196608

4343808 字节

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

这实际上取决于图像的大小。正如你所说,如果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)

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

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 位图像数据占用更多空间。

最新更新