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

问题描述 投票:0回答:1

在这篇文章https://en.m.wikipedia.org/wiki/Indexed_color

它说:

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

我不明白为什么索引16 bpp或更高在内存方面是低效的

因为在这篇文章中还有这样的:

索引颜色可节省大量内存,存储空间和传输时间:使用truecolor,每个像素需要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字节

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

colors size rgb palette indexed
1个回答
0
投票

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

i = p * b

颜色表大小为:

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)

因此,对于各种bytepp,使用索引图像的最小图像大小均衡:

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

© www.soinside.com 2019 - 2024. All rights reserved.