以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- C语言编色彩寄存器 (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=50633) |
-- 作者:卷积内核 -- 发布时间:7/28/2007 9:05:00 AM -- C语言编色彩寄存器 色彩寄存器与调色板 我想调色板对各位初学计算机的同学并不陌生。什么?没听说过?顾名思义,我想画家的调色版你总算听说过了吧。画家将颜料调配在颜料盒里,然后将调好的颜色放在一个颜料盘里,那个颜料盘就是画家的调色板。对于计算机系统来说,在256色以下的屏幕模式下,也有这它自己的颜料,那就是RGB三色射线管,而它的颜料盘,就是它的DAC色彩寄存器。画家依据颜料盘绘出多彩的图画在画布上,而计算机则是依据DAC色彩寄存器将显存的数据计算出的颜色点逐个显示在屏幕上。 色彩寄存器与屏幕模式 如果学了在WINDOWS编程,有些人又会产生疑问了。在WINDOWS下,显示256色的图片我没有对色彩寄存器进行操作啊?回答是YES。因为WINDOWS下的编程一般都是在屏幕16位以上的真彩色模式下进行,而所谓的N色位图(N<=256),只是使用了所有真彩色颜色中的256种颜色而已。所以,在真彩色模式下,显示256色位图并没有使用色彩寄存器。而在2色、16色或256色屏幕模式下,都需要使用色彩寄存器。 色彩寄存器的操作 说了这么大堆,理论还要练习实践才能达到实用的目的。接下来就看看色彩寄存器是如何编程进行操作了。 在实际应用中,设置色彩寄存器可以采用两种方法,一是采用直接端口操作的方法,二是使用BIOS中断调用。 方法一:直接端口操作 设置颜色寄存器值的函数: 方法二:BIOS中断调用 该方法的获取与设置都需要先定义一块足够大的内存来存储或获取系统调色板。 获取颜色寄存器值的函数: r.x.di=FP_OFF(PaletteData); 调色板动画 由于屏幕颜色的显示是需要查找色彩寄存器来获得,那么如果我要改变所有显存为0的点在屏幕上所显示的颜色,只需要改变颜色号0的色彩寄存器值,让所“翻译”出来的显存颜色改变即可。同理,改变颜色号1的色彩寄存器的值,那么显存内所有为1的单元对应的颜色都要改变。根据这个原理,在某些情况下,将一种颜色改变为另外一种颜色通过改变色彩寄存器比改变显存单元的值来得快得多。依据这个原来制作的动画调色版动画。调色板动画由于只需要改变一个色彩寄存器就可以改变屏幕该色彩寄存器所对应的所有点的颜色,因此具有非常高的硬件速度,一般16色和256色屏幕模式下,均采用调色板动画来制作渐入(Fade In)和渐出(Fade Out)的动画。 TC BGI的调色板 不是说16色模式下只需要部分色彩寄存器吗?对于TC的BGI的EGA/VGA16色模式,所采用的颜色号在其graphics.h中是这样定义的:
|
-- 作者:taoyx -- 发布时间:8/9/2007 11:02:00 AM -- good |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
32.227ms |