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