在DOS图形模式12H下,屏幕上显示着一幅图像。欲将当前图像截屏,
保存为 320x200x256 色BMP图像。
需要做两件事:
1.读取颜色表:颜色表用于说明位图中的颜色,它有若干个表项,
每一个表项是一个 RGBQUAD 类型的结构,定义一种颜色。
RGBQUAD结构的定义如下:
typedef struct tagRGBQUAD {
BYTErgbBlue;// 蓝色的亮度(值范围为0-255)
BYTErgbGreen; // 绿色的亮度(值范围为0-255)
BYTErgbRed; // 红色的亮度(值范围为0-255)
BYTErgbReserved;// 保留,必须为0
}
2.读取位图数据:记录位图的每一个像素值,记录顺序是在扫描行内是
从左到右,扫描行之间是从下到上。
我想自己写这个截屏程序。我的问题是:用80x86系列指令,怎样才能
读到当前颜色表?(估计是当前的调色板信息)
请大侠们指点一下相关资料。
------解决方案--------------------------------------------------------
呵呵...改头像了啊?~
我也早想写8086屏幕获取图象(中文字)的程序,有事,耽搁着.
INT 10H(0DH)就可以读了...
我曾在这论坛回复了一个五角星填色的帖子,找了出来...供您参考下,或许有用...不过用INT 10H(0DH)很开销时间..
http://topic.csdn.net/u/20091205/19/fb875e5b-6e8c-4162-9054-200f8cddd45a
------解决方案--------------------------------------------------------
你不是算法“宝宝”吧?
------解决方案--------------------------------------------------------
直接读VGA DAC palette寄存器就可以了,DAC寄存器地址端口3C7h(读)、DAC寄存器地址端口3C8h(写)、DAC数据寄存器端口3C9h。
此操作的硬件兼容性极好,只要显卡是兼容VGA的就没问题(注意EGA没有DAC寄存器),唯一需要处理的例外是,标准VGA的DAC,其RGB各是6位的,读出之后需要左移2位才能和bitmap的调色板设置匹配,某些SVGA支持8位的DAC,需要用VBE INT 10h ax=4F08h bl=01h获取一下DAC palette的宽度,不过你要是只使用模式13h,而不是VESA扩展的256色模式,就不需要这么做。