linux控制台下的svgalib绘图函数库的使用

1.关于 tty图形模式网上已有现成的开源代码库:SVGALib


2.移植 SVGALib ( Ubuntu 环境 )

2.1 下载开源代码
https://launchpad.net/ubuntu/+source/svgalib/1:1.4.3-30
svgalib_1.4.3.orig.tar.gz
svgalib_1.4.3-30.debian.tar.gz
svgalib_1.4.3-30.dsc

2.2 解压、打补丁
tar xzf svgalib_1.4.3.orig.tar.gz
tar xzf svgalib_1.4.3-30.debian.tar.gz

cd svgalib-1.4.3.orig/
for file in ../debian/patches/*.patch; do patch -p1 < $file; done  /* 循环打补丁,

将上层目录:debian/patches 的补丁全打上*/


2.3 编译安装

sudo make install    // 此时编译将会出错,需要安装libx86

error: libx86.h: No such file or directory
error: invalid use of undefined type struct LRMI_regs?


2.3.1 下载libx86
 
下载地址
http://packages.ubuntu.com/lucid/libx86-1

2.3.2 解压、打补丁

tar xzf libx86_1.1+ds1.orig.tar.gz 
gunzip libx86_1.1+ds1-6.diff.gz
cd libx86-1.1/
patch -p1 < ../libx86_1.1+ds1-6.diff

2.3.3  编译安装libx86

make  // 出错,修改lrmi.c,添加宏, 参考561491.patch

lrmi.c:191: error: IF_MASK?undeclared (first use in this function

IF_MASK 这个宏没有定义,根据网上的561491.patch  lrmi.c缺少宏,把宏复制过去就可以了


make
sudo make install


cd svgalib-1.4.3.orig

sudo make install   //svgalib  安装成功!!!


3.可以参照 svgalib-1.4.3.orig/demos  里的vgatest.c 进行编写简单的调试程序。

首先能够去www.svgalib.org把原代码宕下来. 
tar -zxvf svgalib-1.4.3.tar.gz 
cd svgalib-1.4.3 
make 
make install 
假如有需要可能还要执行西面这两行 
echo "/usr/local/lib">>/etc/ld.so.conf 
ldconfig 
好了,下面就能够用svgalib了 
先来个小的 

#include 
int main() 

int i; 
vga_init();//vga初始化 
vga_setmode(G800x600x256);//配置屏幕的显示模式 
vga_setcolor(5);//选用5号颜色 
vga_drawline(50,50,350,350);//用5号颜色画一条线段 
vga_getch(); //得到任意键 
vga_setmode(TEXT);//回到控制台字符模式 
return 0; 

很简单的一个 
编译的时候用 g++ foo.c -o foo -lvga 

下面来个稍微复杂点的

#include 
#include 
#include 
#include 
#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; 

一般很多程式实际上不用svgalib的绘图部分,他们一般只是获得一个图像的入口而已. 
实际应用svgalib图像库绘图的时候,其中vga_打头的函数用的不是很多,gl_打头的才是重点, 因为他能很容易实现双缓冲,卷屏的操作,嗯,今天就先写到这里,以后慢慢写


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值