C语言实现可视化人机界面的有效方法研究

    孙炼

    摘要:C语言当前最主流的结构化程序设计语言,在当前的软件编程中用处比较广泛,怎样使用C语言发挥动画以及图像输出的功能是我们需要重点研究的课题内容。本文中设置了计算机的相关图形模式,并且构建了相对独立的图形程序,探究了C语言输出图像的整个过程,并且探讨了制作简单动画的具体方法和思路,希望为相关人士提供必要的借鉴。

    关键词:C语言;人机界面;有效方法

    0前言

    C语言是一个具有强大功能的计算机编程语言,并且能够进行有效的数据处理,有着十分广泛的应用和实践。一方面利用C语言可以制作多种系统软件,另一方面利用C语言能够绘制动画、二维图像以及三维图像,进而构成人机界面。一般来说,输出函数printf()只可以输出特定的文本信息,没有绘图的功能。所以在C语言标准中,为了达到绘图的目的,其标准函数库中包含了一个功能强大的图形函数库。通过图形模式的操作,能够利用图形函数制作可视化人机界面。

    1设置C语言图形模式

    想要使用C语言的图形绘制功能,首先需要使用一个头文件,在其中我们可以看到许多有用的图形绘制函数。但是这些函数并不是可以直接使用,需要先把屏幕设置成图形模式才可以进行。

    屏幕刚开始默认是文本模式(25行,80列字符模式),需要操作显示卡才能继续。这里所说的显示卡,其实是显示适配器的一般程序,对于不同规格的显示适配器来说,具有各不相同的图形分辨率以及色彩种数。在利用图形函数开始做图之前,需要在graphics.h图形函数库中选择一个合适的函数,选择initgraph()函数,而后依据显示适配器的具体种类和参数将其设定成特定的图形模式。

    需要注意的是,在程序的最开始需要加一个#include。但是相应的驱动程序路径需要对应正确的初始化图形语句,如果没有对应,相应的程序就会无法找到对应的图形驱动文件,也就不能在图形模式下开始運行。此时,在显示器上会出现这样的错误提示信息。

    BGI Error:(use initagraph)Graphics not initialized

    以下笔者通过一个常见的例子来解释这个问题:

    #include/*这里是图形标准函数头文件*/

    Intmain()

    {

    Initgraph;/*图形模式初始化/

    gdriver=DETECT;/*把相应的图形驱动器设置为自动测量*/

    Int gdriver,gmode;/*对图形驱动器的相应变量进行定义*/

    Getch();

    Line(200,200,100,100);/*进行画线*/

    Closegraph();/*把相应的图形模式关闭*/

    return 0:

    }

    以下是对这个程序的说明:

    第一点:关于gdriver,这是个开始要求设置的特定图形驱动器,相应的gmode就是和这种驱动器对应的。如果把gdriver设置成DETECT,计算机硬件就会自动地检测模式和图形驱动器,这样的效率比较低。

    第二点:在特定情况下,比如C:\\下有当前目录,c:\\下有bgi文件,相应的path就可以采用绝对路径的形式。

    第三点,如果完成了图形模式的初始化,那么可以开始进行做图,在这个程序里,line(200,200,100,100)就是一个从点(200,200)到点(100,100)的直线。

    第四点,在程序中使用了一个从图形模式转变成文本模式的函数:closegraph()。

    2在特定的图形模式下写字

    在特定的图形模式中,也能够使用一般的输出putchar(),puts()和printf()在屏幕上输出相应的文本。但是在上文提到的C语言图形函数中,包括具有图形显示模式下文本输出功能的函数outtextxy()等等。

    程序设计者可以使用setclor()这个函数来调节相应的文字的具体颜色,而且用户能够随意地设置文本字符的具体大小,一般来说是通过这两个函数来实现功能的:

    Setusercharsize()/*这个函数用来定义垂直以及水平的具体放大倍数*/

    Settextstyle()/*这个函数的功能是以一样的倍数来放大垂直和水平方向*/

    3建设独立的图形模式

    利用图形模式完成程序之后,在其它的计算机中运行发现这个程序无法运行。究其原因,是因为在图形模式的设置中,没有相应的BGI文件(如果想要使用initgraph()这个函数,那么在连接和编译的过程中需要特定的*.bgi驱动程序装入相应的执行程序中)。如果把在转移软件的过程中没有附带相应的BGI文件,那么这个用户就没有办法进到相应的图形模式里。

    就算是把全部的*.bgi文件转移给相应的用户,还是存在出现路径问题的可能性。

    所以在实际操作过程中,可以把整个图形驱动程序都置入程序里,这样能够完美地解决相应的问题。其实,如果没有驱动程序,可以单独使用可执行图形程序,具体的方法如下(在这个例子中使用的是EGA VGA显示器):

    第一步,首先在相应的编译目录里上输入这样的命令:

    EGAVGA BGIOGJ

    使用这个BGIOBJ命令的目的是把EGAVGA.BG驱动程序转变为目标文件EGAVGA.OBJ。

    第二步,在相应的编译目录里输入这样的命令:

    TLIBkEGAVGA+GRAPHICS.LIB

    在这个命令中,目的是把相应的EGABGA.OBJ的模块,置入到特定的GRAPHICS.LIB库文件里。

    第三步,如果要使用initgraph()函数,则需要加入特定的命令,目的是把相应的EGAVGA驱动程序置入到特定的GRAPHICS.LIB文件里。

    4实现动画的具体思路

    如果在特定的位置划出一条红颜色的直线,那么如果再次画一个红线,原本的红线不会发生变化,还是在那里。但是如果最开始的红线是使用异或方式画的,那么在画第二条线之后,就会发现原本的红线不存在了,从屏幕上消失不见了。可以使用这样的方法实现这个过程:

    #include

    #include

    #include

    #inlude

    Main(){

    setcolor(blue);//把前景的颜色设置成蓝色

    setwritemode(PUT-XOR);//异或模式设置

    Initgraph(&gmode,&gdriver,””);//图形模式的初始化

    line(200,500,200,100);//画出相应的线段

    Closegraph();//把图形模式关闭,然后进入到文本模式中

    return();

    }

    在这个程序中使用了异或模式,可以利用二次完全重画的方式抹掉原来的图形。根据以上的分析,异或可以说是绘制动画的良好选择。

    5结论

    本文探讨了C语言图形模式,使用了亦或的方式和图形函数,成功地制作了可视化的人机界面。这种操作思路容易理解而且方便操作,能够解决人机可视化问题。