逻辑调色板和系统调色板
先来用通俗的语句讲解位图和调色板的概念。
我们知道,自然界中的所有颜色都可以由红、绿、蓝,,三基色组合而
成。针对含有红、绿、蓝色成分的多少,可以对其分别分成 ~ 个等级,
而 红、绿、蓝的不同组合共有 种,因此约能表示 万种
颜色 色。对于人眼而言,这已经是真彩色了。这就是 位图或 其以
上的位图比如 之类的这种位图的图像数据中的每个像素都用了三个
字节来描述记录它什么是图像数据接下来会谈到一个位图文件结构
它包括文件头用来说明文件
文件信息头位图属性
图像数据位图主体数据所在
对每个像素进行了(,,)量化的图像就是位图,其在计算机中对应文件
的扩展名一般为 。既然用 ,, 的量化值就可以直接记录一张位图的
所 有像素,那我们需要调色板干什么呢? 首先,我们可以计算完全利用
(,,)组合来存储一个 的位图所需要的空间为:
!(字节)= "#(字节) 是记录每个像素
值所用的字节数这里说的是 位图 值就用来描述一个像素位图
是由像素组成的因此用一张位图大小乘它的像素数就可 以直接描述一张位图
惊人的大!因此,调色板横空出世了,它的功能在于缓解位图文件存储空间显
存或系统内存过大的问题。 在 $%&' 中存在三种调色板硬件调色板逻辑调
色板系统调色板$%&' 用调色板管理器机制来管理调色板调色板存在于
一个位图文件中,一个窗 体的 () 中,,或 *+ 中,,硬件调色板就是显卡适
配器所能实际表达的颜色深度逻辑调色板就是 $%&' 通过调色板管理机制为
每个窗体应用程序 () 分配 的调色板系统调色板只有一个,而逻辑调色板可
以有多个它的本质就是一块内存中的区域用于描述当前应用使用到的调色板
我们都知道调色板是一个结 构所以逻辑调色板的用途在于模拟硬件调色板
以使 $%&,$' 作为一个 ' 可以为界面显示图像显示等应用提供它们各自专
用的活动的调色板当逻辑调色板色深小于或大小硬件调色板时,,$%&' 通
过调色板管理机制自动让二者谐和系统调色板就是 $%&' 当前正在使用到的
调色板逻辑调色 板可以通过调色板管理机制转变为当前系统调色板但是不
管 $%&' 的调色板管理机制如何,,最终的调色板都要靠硬件调色板来实现
假设一个位图为 色, 色就是上面谈到的可以表示多少种颜色计算一下
的 次方!因此它是 位图我们只需要在图像数据中用 个 % 就可 以存
储这个位图的每个像素在 种颜色中所处的等级,接下来会谈到调色板索引
所占的空间字节数因为它只是一个索引所占的空间会比图像数据 结构
小很多再设其像素总数为 位图大小。然后调色板提供了这 种
等级对应的(,,)值,这样,存这个 色位图只需要:
- 个字节!(字节)!#(字节) 注意:
色图查询它在调色板中的 组合所用的索引需要占用 个 ./这是为
什么?下面解释一下 位 进制数可以表示 种情况, 位 ./ 可以表示现
实中我们使用的十进制的 0 种情况额外的存储 ,, 表的开销(即
调色板 ,也称为颜色查找表 12/)仅仅为 = 字节。 存储空