SVGA图像处理
SVGA图像处理 SVGA图像处理 SVGA图像处理 SVGA彩色图形卡是一种超级VGA卡,它不仅具有640×480×16色图像显示模式,而且具有640×480×256色图像显示模式。
Microsoft C/C++7.0提供了丰富的图形库函数,尤其是提供了对SVGA卡所能设置的高分辨率图像模式的支持,利用丰富的图形库函数进行组合,就可以完成各种需要的功能。例如图像处理,动画编程,界面制作等。这一点对编程者来说无疑是十分方便的。根据VESA图形标准,在图像模式下,SVGA的Video buffer是顺序的链结构,且图像数据是按行序顺序存放的,一个像素用存储器的一个字节表示。视频存储器按字节连续寻ซ址,与主机内存采用映射方式通讯,一次只能读写64KB的视频存储器,通유过改变段偏移量来寻址不同的段,即实现对全部视频存储器的操作。
同时,直接访问SVGA的寄存器进行读写操作,充分利用硬件的支持可以大大加快图形的处理速度。实践表明,其运行速度明显优于图形库中提供的函数和-putimage为例快30倍)。-getimage和-putimage两个函数的参数类型说明及意义与Microsoft C/C++7.0中相应函数的参数类型说明及意义相同。
/* 将图像存储到缓冲区中 */short x1,y1,x2,y2;
char-huge *image;
{
char-far*buf,-huge *q;
lปong u;
short m,n,i,j,block;
m=abs+1;
n=abs+1;
*image=m;
*=n;/* 保留图像的高度与宽度 */
q=image+4;u+=min * 640L;
block=;
u-=block*65536L;/* 计算偏移量 */
-FP-SEG=0xA000;
-FP-OFF=u;
-outp,
-outp;/* 设置页寄存器 */
for {/* 行循环 */
-memcpy;
u+=640;
if buf+=640;
else {/* 当一行不在同一段时 */
u-=65536L;
-FP-SEG=0xA000;
-FP-OFF=0;
block++;
-outp;
-outp;
if-memcpy);
-FP-OFF=u;
}
}
}
/* 在缓冲区中搜索图像 */
void-putimage256
short x,y,action;/* 参数action表示图像写方式 */
char-huge * image;
{
char-far *buf,-huge*q;
long u;
short m, n, j, i, block, mm;
-memcpy;
if >6
40) m=640-x;
else m=mm;
-memcpy;
if n=480-n;/* 取图像的高度和宽度,并进行边界处理 */
q=image+4;
u=x;
u+=y*640L;
block= ;
u-=block*65536L;
-FP-SEG=0xA000;
-FP-OFF=u;
-outp;
-outp;
for {
if -memcpy;
else♥ iffor * |=);
else ♀iffor * &=);
else iffor * ^=);
else iffor * =~);
u+=640;
if buf+=640;
else {
u-=65536L;
-FP-SEG=0xA000;
-FP-OFF=0;
block++;
-outp;
-outp;
if {
if -memcpy);
else if
for *|=);
else if
for * &=);
else if
for * ^=);
else if
for * =~);
}
-FP-OFF=u;
}
}
}