;
#include ;
int main()
{
int i;
bool flag;
int pointx;
int pointy;
unsigned char *colors;
vga_init();
//svgalib初始化
vga_setmode(G800x600x256);
//设置屏幕的显示模式,800X600的分辨虑,256色
vga_setcolor(5);
//选用5号颜色
vga_drawline(200,300,600,100);
//用5号颜色画一条线段
vga_drawpixel(400,100);
//在坐标400,200以5号颜色画上一点
for(i=0;i<255;i++)
{
vga_setcolor(i);
vga_drawpixel(i,100);
}
vga_getch(); //按任意键继续
vga_screenoff();//关闭屏幕,你将什么都看不到
colors=(unsigned char *)malloc(800);
for(i=0;i<800;i++)
colors[i]=vga_getpixel(i,100);
//得到屏幕上纵坐标为100的线的所有点的颜色
vga_drawscanline(15,colors);
//画一条水平扫描线,不过由于已关闭屏幕,你将什么都看不到
vga_getch();//按任意键继续
vga_screenon();//打开屏幕,你将发现屏幕上多了个水平扫描线
vga_setpalette(5,20,10,15);
//改调色板,胡乱定义5号颜色为R200,G100,B150
vga_setcolor(5);
vga_drawline(200,300,700,500);
//你将看到以前的那条线的颜色也改变了,因为调色板是全局的
vga_drawscansegment(colors,100,300,50);
//画我们所得到的水平扫描线的一部分,从100,300开始50个点
//稍微来点小花样
for(i=0;i<100;i++)
{
vga_drawscansegment(colors,100+i,10+i,50);
vga_drawscansegment(colors,200-i,10+i,50);
}
for(i=0;i<100;i++)
{
vga_drawscansegment(colors,600+i/2,10+i,50);
vga_drawscansegment(colors,700-i/2,10+i,50);
}
//下面画个正弦曲线
vga_setcolor(1);
vga_drawline(10,300,700,300);
vga_drawline(680,280,700,300);
vga_drawline(680,320,700,300);
vga_drawline(400,50,400,550);
vga_drawline(380,70,400,50);
vga_drawline(420,70,400,50);
pointx=100;
pointy=300;
vga_setcolor(4);
for(i=1;i<540;i++)
{ vga_drawline(pointx,pointy,100+i,300+100*sin(i*M_PI/180));
pointx=100+i;
pointy=300+100*sin(i*M_PI/180);
}
//下面操作调色板玩玩看看
i=0;
flag=true;
while(!vga_getkey())//当没有键盘输入的时候循环
{
vga_waitretrace();
//等到射线扫描返回,此函数对防止屏幕闪烁很有用
vga_waitretrace();
//呵呵,另外一个作用就是还可以用来延时,大约1/40到1/80秒之间
vga_setpalette(4,i,i,i);
vga_setpalette(5,i,i/2,63);
if(flag)i++;
else i--;
if(i==63)flag=false;
if(i==1)flag=true;
}
vga_setmode(TEXT);//回到控制台字符模式
free(colors);
return 0;
}
[/code]
一般很多程序实际上不用svgalib的绘图部分,他们一般只是获得一个图形的入口而已.
实际应用svgalib图形库绘图的时候,其中vga_打头的函数用的不是很多,gl_打头的才是重点, 因为他能很容易实现双缓冲,卷屏的操作.呵呵,先到这里。