颜色图和真彩色之间的差异
曲面、补片和图像等许多图形对象支持两种不同的指定颜色的方法:颜色图(使用索引颜色)和真彩色。每种方法涉及不同的工作流,对视觉表示有不同的影响。
工作流差异
颜色图是一个 m×3 数组,其中每一行指定一个 RGB 三元组。要在图形表示中使用颜色图,应为图形中的每个位置分配一个索引。每个索引对应颜色图中的一行,用以在图形中的指定位置显示一种颜色。相比之下,使用真彩色则是在图形中的每个位置指定一个 RGB 三元组。
确定使用何种方法时要考虑的一些要点如下。
真彩色更为直接。如果您想为图形中的特定位置分配具体的红色、绿色、蓝色值,使用真彩色通常更为容易。
要在调色板区域中进行更改,则使用颜色图更为容易。例如,如果您想加亮从蓝色到绿色的渐变,则在颜色图中编辑这些行比在图形中的各个位置编辑颜色更为容易。
您的数据格式可能更适合其中一个工作流。例如,许多 GIF 压缩图像使用索引颜色进行存储。
这两种标记颜色的方法都是使用颜色数组 C
来指定颜色信息。C
的形状取决于图形对象的类型以及您选取的颜色标记方法。下表归纳了这些差异。
图形对象的类型 | 包含颜色数组 C 的属性 | 索引颜色 C 的形状 | 真彩色 C 的形状 |
---|---|---|---|
Surface | CData | C 为 m×n 数组,其大小与 z 坐标数组相同。C(i,j) 处的值指定 Z(i,j) 的颜色图索引。 | C 为 m×n×3 数组,其中 C(:,:,i) 的大小与 z 坐标数组相同。C(i,j,1) 指定 Z(i,j) 的红色分量。C(i,j,2) 指定 Z(i,j) 的绿色分量。C(i,j,3) 指定 Z(i,j) 的蓝色分量。 |
Image | CData | C 是 m×n 图像的一个 m×n 数组。C(i,j) 处的值指定像素 (i,j) 的颜色图索引。 | C 是 m×n 图像的一个 m×n×3 数组。C(i,j,1) 指定像素 (i,j) 的红色分量。C(i,j,2) 指定像素 (i,j) 的绿色分量。C(i,j,3) 指定像素 (i,j) 的蓝色分量。 |
Patch (x, y, z) | CData | 在标记补片面的颜色时,C 是 m 个补片面的一个 1×m 数组。C(i) 指定面 i 的颜色图索引。在标记补片顶点的颜色时, C 是一个 m×n 数组,其中 m 为每个面的顶点数,n 为面数。C(i,j) 指定面 i 的顶点 j 的颜色图索引。 | 在标记补片面的颜色时,C 是 m 个补片面的一个 m×3 数组。C(i,:) 指定面 i 的红色、绿色和蓝色值。在标记补片顶点的颜色时, C 是一个 n×3 数组,其中 n 为顶点总数。C(i,:) 指定顶点 i 的红色、绿色和蓝色值。 |
Patch (面-顶点数据) | FaceVertexCData | 在标记补片面的颜色时,C 是 m 个补片面的 1×m 数组。C(i) 指定面 i 的颜色图索引。在标记补片顶点的颜色时, C 为 1×n 数组,其中 n 为顶点总数。C(i) 指定顶点 i 的颜色图索引。 | 在标记补片面的颜色时,C 是 m 个补片面的一个 m×3 数组。C(i,:) 指定面 i 的红色、绿色和蓝色值。在标记补片顶点的颜色时, C 是一个 n×3 数组,其中 n 为顶点总数。C(i,:) 指定顶点 i 的红色、绿色和蓝色值。 |
视觉表示的差异
颜色图提供由 m 种颜色组成的调色板,其中 m 为颜色图的长度。相比之下,真彩色则提供涵盖 256×256×256 ≈ 168 万种颜色的调色板。
在确定调色板的大小时应考虑以下因素:
用纯色填充大块区域时,最经济的方法是使用较小的调色板。它们在可视化曲面等高线时也很有用。
较大的调色板显示细微过渡和平滑颜色梯度的效果更好。
通过跨补片面的顶点进行颜色插值能够更明显地看出索引颜色和真彩色之间的差异。下面两个补片说明了一种极端情况。左侧的补片使用了小颜色图,而右侧的补片使用了真彩色。
如果您担心颜色图的调色板有限,可以向调色板中添加更多颜色。使用颜色图更改颜色方案说明了如何使用包含特定数量颜色的颜色图。