如何为黑白图像添加调色板?

时间:2013-09-25 20:32:39

标签: image-processing 8-bit

我注意到在一些基于磁贴的游戏引擎中,磁贴被保存为灰度或有时甚至是黑色或白色,然后通过存储“调色板”来添加颜色以应用于某些像素但是我从来没有看看它是如何知道哪些像素的 仅仅举几个引擎我已经看过使用这个,Notch的Minicraft和Gameboy的旧口袋妖怪游戏。这让我了解了旧游戏中如何使用调色板:deconstructulator

从我看到的人们在教程中使用这种技术,它使用了一种位移的形式,但是我想知道它是如何有效的,它在旧的8位控制台中是强制性的 - 它是怎么回事可以将红色,绿色和蓝色应用于每帧的图像的特定像素,而不是保存整个彩色图像(一些伪代码会很好)。

1 个答案:

答案 0 :(得分:0)

它的有效之处在于它可以节省内存。存储RGB值通常需要24位(每通道8位)。虽然具有256 {/ 3}的256种颜色(需要256 * 24位= 768字节),但每个像素仅需要8位(2 ^ 8 = 256种颜色)。因此,在相同数量的内存中可以存储三倍的像素(如果不计算所需的调色板),但显然有一组有限的颜色。这曾经在硬件中得到支持,因此图形内存也可以更有效地使用(实际上这仍然在现代PC硬件中得到支持,但几乎从未使用过,因为图形内存不再受限制了。)

一些硬件(包括第一个口袋妖怪游戏支持的Super Gameboy)一次使用多个硬件调色板。不同的图块集被映射到不同的调色板。但是瓷砖映射到不同调色板的方式非常依赖于硬件,而且往往不是很直接。

存储图像位的方式也不总是那么直接。如果像素是8位,则它可以是字节数组,其中每个字节只是一个像素(对于许多旧DOS游戏中使用的经典VGA模式)。但Gameboy例如每像素使用2位,而其他使用4,即每个调色板2 ^ 4 = 16种颜色。在内存中排列位的常用方法是使用palette。即(在16色彩图形的情况下)存储4个单独的黑白图像。但是在某些情况下,位平面也可以以不同的方式交错。因此,如何以这种方式解码/编码图形没有简单而通用的答案。所以我想你必须更具体地说你想要伪代码。

我不确定这有什么适用于Minicraft。也许只是图形如何存储在磁盘上。但是一旦图形加载到图形内存中它就没有意义了。 (也许你还有其他一些Minicraft功能?)