1

通常,最常见的 RGB 格式似乎是 24 位 RGB(每个通道 8 位)。然而,从历史上看,RGB 已经以许多其他格式表示,包括 3 位 RGB(每通道 1 位)、6 位 RGB(每通道 2 位)、9 位 RGB(每通道 3 位)、等等

当 N 位 RGB 文件的 N 值不是 8 的倍数时,这些位图通常如何在内存中表示?例如,如果我们有 6 位 RGB,则意味着每个像素都是 6 位,因此现代计算机无法在不使用位运算的情况下直接寻址每个像素。

那么,将 N 位 RGB 文件简单地转换为每个像素具有可寻址大小的位图(例如将 6 位转换为 8 位)是一种常见的做法吗?或者更常见的是简单地使用按位运算来操作像素大小不可寻址的位图?

那么磁盘存储呢?例如,当位图的最后一个字节甚至可能不包含完整像素时,如何存储在磁盘上的 6 位 RGB 文件?

4

2 回答 2

0

图像通常很重,传输它们时带宽至关重要。因此,如果可以接受一些色度损失(通常在纹理和照片中不明显),则每通道 6 位图像是一个合理的选择

例如,当位图的最后一个字节甚至可能不包含完整像素时,如何存储在磁盘上的 6 位 RGB 文件?

如果最小的存储单元是字节,那么是的,您需要添加一些填充以 8 位对齐。这很好,因为与每通道 8 位图像相比,节省的空间是相当可观的。

可以被 6 整除的 2 值的幂非常大。更好的数字是红色和蓝色通道为 5 位,绿色通道为 6 位,总计为每像素 16 位。R5G6B5 是一种非常常见的像素格式。

于 2013-08-19T01:00:37.020 回答
0

为考古挖掘道歉,但我无法抗拒,因为没有好的答案恕我直言。

在过去,内存是计算机中最昂贵的部分。如今,内存非常便宜,因此在现代硬件中处理 N 位通道图像的最明智方法是将每个通道放大到适合您的 API 或硬件的位数(通常为 8 位)。

对于文件,您也可以这样做,因为现在磁盘空间也很便宜。(您可以使用许多压缩文件格式中的一种。)

也就是说,在这些格式很常见的过去,它的工作方式是这样的:

每个像素的总位数不是 8 的倍数,但每条扫描线的像素数始终是 8 的倍数。在这种情况下,您可以“一次一点”存储扫描线,而不会浪费任何内存以字节为单位存储时的空间。

因此,如果您的像素是每个像素 9 位,并且扫描线是 320 像素,那么您将有 320/8 = 40 个字节,其中包含每个像素的第 0 位,然后是 40 个字节,其中包含所有第 1 位等,直到并包括位#8。因此,您的扫描线的所有像素信息都将是 360 字节。

视频芯片与内存的硬件接线不同,因此渲染这样的扫描线很快。事实上,这是实现可变数量的比特/像素硬件支持的最简单方法:一次从 N 个地址中提取比特。

请注意,此方法不会根据您使用的总位数更改在扫描线中查找像素编号 X 的位所需的“位移”量。您只需一次读取更少的地址。

于 2014-03-17T17:23:39.343 回答