Categories: 技术

调色板(计算机)

在计算机图形学中,调色板(Palette)是一组有限的颜色。 在存在软件或硬件限制的情况下,可以优化调色板以提高图像的准确性。

术语
自适应调色板从2种颜色扩展到256种颜色,演示图像如何变化(点击查看动画)。
根据上下文的不同,术语调色板和相关术语(如Web调色板和RGB调色板)可能具有不同的含义。 以下是计算机图形学中调色板广泛使用的一些含义:

给定系统能够生成或管理的颜色总数(尽管由于视频内存限制,它可能无法同时显示全部颜色):
完整的调色板:例如,Highcolor显示器被称为具有16位RGB调色板。

可以同时显示的颜色选择有限:
在整个屏幕上:
固定调色板选择:给定的显示适配器在其硬件寄存器设置适当时可以提供固定的颜色选择。 例如,在其中一种标准图形模式中,彩色图形适配器(CGA)可以设置为显示所谓的调色板#1或调色板#2:两种固定颜色和一种用户定义背景颜色的组合每。
选择的颜色或选择的颜色:在这种情况下,颜色选择(通常来自更广泛的明确可用的全部调色板)通常由软件通过用户或程序来选择。 例如,标准的VGA显示适配器据说提供了总共262,144种不同颜色的256种同时颜色的调色板。
默认调色板或系统调色板:给定的选定颜色已由某个机构或公司正式标准化。 例如,用于Internet浏览器的众所周知的Web安全颜色或Microsoft Windows默认调色板。

在个人形象上:
彩色图或颜色表:有限的颜色选择存储在给定索引的彩色图像文件内。 例如,GIF。
图像调色板或图像颜色:即使图像文件不采用索引颜色像素编码,也会将有限的颜色选择假定为给定数字图像具有的颜色的完整列表。
可用于保存这些同时颜色的底层硬件:
硬件调色板或颜色查找表(CLUT):为了显示它们,所选颜色的值必须加载到显示子系统的彩色硬件寄存器中。 例如,Commodore Amiga的硬件寄存器被称为调色板和CLUT,具体取决于来源。

GUI调色板
可以选择的一组有限的用户或系统颜色的排列。 在这种情况下,表达式调色板或用户调色板是常见的等价物。 这种用法类似于一位真正的艺术家的调色板。
用于快速命令或符号访问的应用程序屏幕的工具调色板,矩形区域,称为调色板窗口,带有按钮,图标或其他GUI控件; 如果用户能够通过鼠标或类似的指点设备将其放置在任何地方,它就被称为浮动调色板。 用于选择颜色的调色板也可以是浮动调色板。

主调色板
应用程序可以依次在屏幕上显示马赛克中的许多不同图像缩略图。 很明显,程序无法在硬件颜色寄存器中同时加载所有显示的图像缩略图的所有自适应调色板。 解决方案是使用独特的通用主调色板或通用调色板,可用于以合理的精度显示任何类型的图像。

这是通过选择颜色来完成的,主调色板包含“缩小”的完整RGB色彩空间,限制红色,绿色和蓝色分量可能具有的可能级别。 这种安排有时被称为统一调色板。 正常的人眼对不同程度的三原色具有敏感性:越是绿色,越少越蓝。 因此,RGB配置可以通过为绿色组件分配更多级别而减少蓝色来利用此优势。

以这种方式构建的主调色板可以填充高达8R×8G×4B = 256种颜色,但这不会在调色板中留出保留颜色的空间,该程序可用于特殊用途的颜色索引。 仅使用6R×6G×6B = 216(如在Web颜色案例中),6R×8G×5B = 240或6R×7G×6B = 252,这为一些预留颜色留出空间。

然后,在加载图像缩略图(或其他异构图像)的镶嵌图时,程序会简单地将每个原始索引颜色像素映射到主调色板中的最接近的颜色像素(将这些像素转储到硬件颜色寄存器之后),然后将结果写入视频缓冲区。 以下是四个图像缩略图的简单拼图示例,使用240个RGB排列颜色的主调色板以及16个额外的灰色中间色调; 所有图像都放在一起而不会明显损失颜色精确度:

自适应调色板
当使用索引颜色技术时,通过使用自适应调色板(有时拼写为自适应调色板),真实图像通过一些算法直接从原始图像中选择或量化(通过选择最常见的颜色)。 这样,随着进一步的抖动,索引的彩色图像几乎可以与原始图像匹配。

但是这会在图像像素和自适应调色板之间产生很大的依赖关系。 假设有限的8位深度图形显示,在将图像表面本身加载到帧缓冲区之前,需要将给定图像的自适应调色板加载到颜色硬件寄存器中。 要以不同的自适应调色板显示不同的图像,必须逐个加载它们,如幻灯片中所示。 以下是带有彩色补丁的四种不同索引彩色图像的样本,以显示其各自(并且大部分不兼容)的自适应调色板:

调色板中的透明度
索引的彩色图像中的单个调色板条目可以被指定为透明色彩,以便执行简单的视频叠加:将给定图像叠加在背景上,使得重叠图像的某些部分模糊背景,而其余部分。 叠加电影/电视节目和片头是视频叠加的典型应用。

在要叠加的图像中(假定为索引颜色),给定的调色板条目扮演透明色的角色。 通常索引号为0,但如果通过软件执行覆盖,则可以选择其他索引。 在设计时,透明调色板条目被赋予任意(通常与众不同)的颜色。 在下面的示例中,指针设备的典型箭头指针设计在橙色背景上,因此此处橙色区域表示透明区域(左侧)。 在运行时,重叠的图像放置在背景图像的任何位置,并且以如果像素颜色索引是透明颜色的方式混合,背景像素被保留,否则将被替换。

Related Post

该技术用于指针,用于角色,子弹等(精灵),视频标题和其他图像混合应用的典型2-D视频游戏。

一些早期的计算机,如Commodore 64,MSX和Amiga支持通过硬件进行精灵和/或全屏视频覆盖。 在这些情况下,透明调色板条目号由硬件定义,并且它曾经是数字0。

一些像GIF和PNG的索引彩色图像文件格式本身支持将给定调色板条目指定为透明,可以在用于给定图像的任何调色板条目中自由选择。
BMP文件格式在其颜色表中为Alpha通道值预留空间,但是当前此空间不用于保存任何半透明数据并且设置为零。

在处理真彩色图像时,某些视频混合设备可以使用RGB三元组(0,0,0)(不含红色,不含绿色,不含蓝色:最深的黑色阴影,有时在此情况下称为超黑色)作为透明色。 在设计时,它被所谓的魔法粉色所取代。 同样的,典型的桌面出版软件也可以假设从照片和插图中排除纯白色,RGB三联体(255,255,255),以便让文本段落侵入图像边界框,以便在图像主题周围形成不规则的文字排列。

二维绘画程序(如Microsoft Paint和Deluxe Paint)可以在执行剪切,复制和粘贴操作时使用用户指定的背景色作为透明色。

尽管相关(由于它们用于相同的目的),但图像位掩码和alpha通道是不涉及使用调色板或透明颜色的技术,但是脱离图像添加了额外的二进制数据层。

软件调色板

微软Windows
Microsoft Windows应用程序通过Win32 API的特殊功能(用于Highcolor和Truecolor显示模式,这些功能缺乏任何有趣的功能)来管理4位或8位索引彩色显示设备的调色板。 这些API处理所谓的系统调色板和许多逻辑调色板。

系统调色板是彩色显示器硬件寄存器的RAM中的副本,主要是物理调色板,它是系统的唯一共享公共资源。 在启动时,它加载了默认的系统调色板(主要是一个主调色板,对大多数程序来说运作良好)。

当给定的应用程序打算输出彩色图形和/或图像时,它可以设置它们自己的逻辑调色板,即它自己的私人颜色选择(高达256)。 假设应用程序试图在屏幕上显示的每个图形元素都使用其逻辑调色板的颜色。 每个程序都可以自由管理一个或多个逻辑调色板,而无需进一步预期的干扰(提前)。

在输出有效之前,程序必须实现其逻辑调色板:系统尝试将逻辑色与物理色相匹配。 如果预期的颜色已经存在于系统调色板中,则系统内部映射逻辑调色板索引和系统调色板索引(由于它们很少一致)。 如果目标颜色尚未出现,系统将应用内部算法来放弃系统调色板中最少使用的颜色(通常是由背景中的另一个窗口使用的颜色),并用新颜色替换。 由于系统调色板中的颜色空间有限,该算法也尝试将相似的颜色重新映射到一起,并始终避免多余的颜色。

最终结果取决于有多少应用程序正在使用屏幕颜色。 前景窗口始终受到青睐,因此后台窗口可能会有不同的表现方式:从损坏到快速重绘自己。 系统调色板更改时,系统触发特定事件以通知每个应用程序。 收到时,窗口可以使用单个Win32 API函数快速重绘。 但是这必须在程序代码中明确做到; 因此许多项目缺乏管理这一事件的事实,并且在这种情况下他们的窗户变得腐败。

应用程序可以强制系统调色板以特定的颜色甚至以特定的顺序加载,通过告诉它们是用于动画的颜色条目(在特定条目下快速改变物理调色板中的颜色)来欺骗系统。 系统不能假定每个硬件调色板条目对于它们的调色板颜色管理都是空闲的,并且这些条目从其算法中排除。 最终的结果取决于颜色强制程序的技能和其他程序的行为(最后的结果与常规情况完全相同),以及操作系统本身的行为。

Share