除了清屏函数以外,关于屏幕操作还有以下函数:
这两个函数只用于EGA,VGA 以及HERCULES图形适配器。
setctivepage()函数是为图形输出选择激活页。
所谓激活页是指后续图形的输出被写到函数选定的pagenum页面,该页面并不一定可见。
setvisualpage()函数才使pagenum所指定的页面变成可见页。页面从0开始(Turbo C默认页)。
如果先用setactivepage() 函数在不同页面上画出一幅幅图像,再用setvisualpage() 函数交替显示,就可以实现一些动画的效果。
这三个函数用于将屏幕上的图像复制到内存,然后再将内存中的图像送回到屏幕上。首先通过函数imagesize() 测试要保存左上角为(xl,yl),右上角为(x2,y2)的图形屏幕区域内的全部内容需多少个字节,然后再给mapbuf分配一个所测数字节内存空间的指针。通过调用getimage()函数就可将该区域内的图像保存在内存中,需要时可用putimage()函数将该图像输出到左上角为点(x, y)的位置上,其中getimage()函数中的参数op规定如何释放内存中图像。 关于这个参数的定义参见下表。
putimage()函数中的op值
━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号常数 数值 含 义 ────────────────────────── COPY_PUT 0 复制 XOR_PUT 1 与屏幕图像异或的复制 OR_PUT 2 与屏幕图像或后复制 AND_PUT 3 与屏幕图像与后复制 NOT_PUT 4 复制反像的图形 ━━━━━━━━━━━━━━━━━━━━━━━━━━
对于imagesize()函数,只能返回字节数小于64K字节的图像区域,否则将会出错,出错时返回-1。
本节介绍的函数在图像动画处理、菜单设计技巧中非常有用。
下面程序模拟两个小球动态碰撞过程。
#include<malloc.h>
#include<stdio.h>
#include<graphics.h>
int main()
{
int i, gdriver, gmode, size;
void *buf;
gdriver=DETECT;
initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
setbkcolor(BLUE);
cleardevice();
setcolor(LIGHTRED);
setlinestyle(0,0,1);
setfillstyle(1, 10);
circle(100, 200, 30);
floodfill(100, 200, 12);
size=imagesize(69, 169, 131, 231);
buf=malloc(size);
if(!buf) return -1;
getimage(69, 169, 131, 231,buf);
putimage(500, 269, buf, COPY_PUT);
for(i=0; i<185; i++){
putimage(70+i, 170, buf, COPY_PUT);
putimage(500-i, 170, buf, COPY_PUT);
}
for(i=0;i<185; i++){
putimage(255-i, 170, buf, COPY_PUT);
putimage(315+i, 170, buf, COPY_PUT);
}
getch();
closegraph();
}