当前位置: 首页 > 工具软件 > SVGAlib > 使用案例 >

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

陆畅
2023-12-01

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_打头的才是重点, 因为他能很容易实现双缓冲,卷屏的操作,嗯,今天就先写到这里,以后慢慢写

 类似资料: