关于逻辑调色板,系统调色板和设备调色板的问题 位图高手进来小弟是VC++的初学者 正在看《VC++技术内幕》 看到了关于位图的操作 里面设计到2个位图对象 一个是GDI位图对象(和设备有关)

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/19 16:06:29
关于逻辑调色板,系统调色板和设备调色板的问题 位图高手进来小弟是VC++的初学者 正在看《VC++技术内幕》 看到了关于位图的操作 里面设计到2个位图对象 一个是GDI位图对象(和设备有关)

关于逻辑调色板,系统调色板和设备调色板的问题 位图高手进来小弟是VC++的初学者 正在看《VC++技术内幕》 看到了关于位图的操作 里面设计到2个位图对象 一个是GDI位图对象(和设备有关)
关于逻辑调色板,系统调色板和设备调色板的问题 位图高手进来
小弟是VC++的初学者 正在看《VC++技术内幕》 看到了关于位图的操作 里面设计到2个位图对象 一个是GDI位图对象(和设备有关) 一个是DIB(与设备无关)
现在就面临一个“调色板”的理解 书上说的十分含糊 我知道系统调色板是一个256 X 256 X 256的颜色表(一个颜色由R G B三种成分搭配组成 每个有256个深度 所以是256 X 256 X 256G个颜色) 但是位图不一定用到那么多(4位位图 16位位图都用不到那么多) 于是DIB中自带一个颜色表
我的问题:
1 DIB的颜色表是不是逻辑调色板?
2 为什么我在一个窗口内绘制位图的时候 要向DC(设备环境)载入逻辑调色板?
3 逻辑调色板 和 系统调色板 和 设备调色板的关系 之间如何映射(好复杂啊)
4 请问施行(realize)调色板(应该是逻辑调色板)是什么意思啊 书上根本没有解释
请高手指教 拜托不要复制一大堆话 我自己百度了 完全看不懂 请一定有通俗的话给我解释解释 最好详细点 举几个例子 我很笨
我一定会追加分数的

关于逻辑调色板,系统调色板和设备调色板的问题 位图高手进来小弟是VC++的初学者 正在看《VC++技术内幕》 看到了关于位图的操作 里面设计到2个位图对象 一个是GDI位图对象(和设备有关)
你要的答案内容实在太多了,回答不了.
我挑一些简单的回答下,其它的有哪位好心人再补充下吧.
系统调色板就简单理解为一个数组,里面有256个元素,每个元素代表一种颜色.所以系统调色板共可以储存256种颜色,其中系统已经预留20种颜色共系统使用.这个在调用GetSysColor时,就应该有所体会了.
颜色表是什么术语?我没见过.猜测指的应该就是调色板.
任何的图像文件其实和一般数据库文件是没什么区别的,就是由文件头,和实际储存的颜色数据构成.前者当然在前面,后者当然在后面.实际储存的颜色数据可以想象成一个庞大的数组.我们获得了这个数组地址后,可以任意操纵(修改)里面的颜色数据,其中不乏有些获得特殊颜色效果的算法.
颜色数组分为2类.第一类,数组里存储的是一个个索引值,就和数据库一样,索引值不存储实际的记录,而是指向了正真存记录的地方.在BMP里,它指向调色板,如颜色数组,DIBBits[2]的值为19,就是说它的颜色应该为在调色板里的第19个元素.这样,颜色数组和调色板数组的联系立刻就明白了吧!
另外,每个DC都有自己的调色板(逻辑),程序员可以任意修改它.这和改画笔,画刷是一样的.只不过入门书籍只介绍笔,画刷之类的.不常介绍调色板.
窗口甲DC用的调色板和窗口乙DC用的调色板不一样(回忆下2个DC我们不是会用不同颜色的画笔吗),结果造成同样的颜色数组,由于DC里的调色板不一样,使最终DC画到窗口里的BMP位图呈现的色彩会不一样.
调色板修改后,无法直接产生效果,必须调用realize,使最终颜色映射到系统调色板里,因为最终用来画图的是系统调色板里的颜色,而不是逻辑调色板.
通常感觉我们并没有在使用DC时,调用realize来映射.只是默认的已经全都做好了.但如果改了DC的调色板是一定要映射到系统调色板的.系统调色板最多映射236(256-20预留).
第二种位图颜色数组指的是,里面存放的是实际颜色,不是索引值.如DIBBits[2]的值有3个字节,由低到高顺序对应RGB.