当前位置:文档之家› C语言图形编程

C语言图形编程

C的图形编程一、屏幕显示模式1、文本模式在文本模式又称字符模式。

在此模式下整个屏幕被划分成(25行,80列),共25*80个文本单元,每个单元包括一个字符和一个属性, 字符即ASCII 码字符, 属性规定该字符的颜色和强度。

坐标原点在屏幕的左上角。

如下图所示:在<conio.h>头文件中定义了文本模式下一些函数常用的有;(1)定义一个文本窗口void window(int left, int top, int right, int bottom);如要定义一个窗口左上角在屏幕(20, 5)处, 大小为30列15行的窗口可写成:window(20, 5, 50, 25);(2)文本窗口颜色的设置void textbackground(int color); //设置背景颜色:void textcolor(int color); //设置字符颜色:有关颜色的定义见表1。

(3)光标定位void gotoxy(int x, int y);(4)清屏void clrscr(void);(5)其它函数一、窗口内文本的输出函数int cprintf("<格式化字符串>", <变量表>); int cputs(char *string);int putch(int ch);cprintf()函数输出一个格式化的字符串或数值到窗口中。

它与printf() 函数的用法完全一样, 区别在于cprintf()函数的输出受窗口限制, 而printf() 函数的输出为整个屏幕。

cputs()函数输出一个字符串到屏幕上, 它与puts()函数用法完全一样, 只是受窗口大小的限制。

putch()函数输出一个字符到窗口内。

二、窗口内文本的输入函数int getche(void);getche()函数从键盘上获得一个字符, 在屏幕上显示的时候, 如果字符超过了窗口右边界, 则会被自动转移到下一行的开始位置。

例1:下面这个程序使用了关于窗口大小的定义、颜色的设置等函数, 在一个屏幕上不同位置定义了7个窗口, 其背景色分别使用了7种不同的颜色。

#include <stdio.h>#include <conio.h> //文本模式下的函数void main(void){ int i;char *c[]={"BLACK", "BLUE", "GREEN", "CYAN", "RED", "MAGENTA", "BROWN", "LIGHTGRAY"};textbackground(0); /* 设置屏幕背景色 */clrscr(); /* 清除文本屏幕 */cputs(c[0]);for(i=1; i<8; i++){ window(10+i*5, 5+i, 30+i*5, 15+i); /* 定义文本窗口 */textbackground(i); /* 定义窗口背景色 */clrscr();cputs(c[i]); /* 清除窗口 */}getch();}表1. 有关颜色的定义━━━━━━━━━━━━━━━━━━━━━━━━━━━符号常数数值含义字符或背景───────────────────────────BLACK 0 黑两者均可BLUE 1 兰两者均可GREEN 2 绿两者均可CYAN 3 青两者均可RED 4 红两者均可MAGENTA 5 洋红两者均可BROWN 6 棕两者均可LIGHTGRAY 7 淡灰两者均可DARKGRAY 8 深灰只用于字符LIGHTBLUE 9 淡兰只用于字符LIGHTGREEN 10 淡绿只用于字符LIGHTCYAN 11 淡青只用于字符LIGHTRED12 淡红 只用于字符LIGHTMAGENTA 13 淡洋红 只用于字符 YELLOW 14 黄 只用于字符WHITE 15 白 只用于字符BLINK 128 闪烁 只用于字符━━━━━━━━━━━━━━━━━━━━━━━━━━━例2:捕获键盘按键。

键盘扫描码:每个键都有一个两字节的扫描码,其格式:#define ESC 0x011B#define UP 0x4800#define DOWN 0x5000 #define LEFT 0x4B00#define RIGHT 0x4D00#define ENTER 0x1C0D在头文件<bios.h>中定义如下函数,用以捕获键盘按键。

int bioskey(int mode); //此函数声明于 bios.hmode 为1时,如有按键盘,则记录其扫描码至缓冲区,并返回其扫描码;无按键则返回0; 不清除缓冲区。

mode为0时,从键盘缓冲区取出按键,并清除缓冲区。

若没有的话,则等待。

如:ESCUPDOWNLEFTRIGHTF1F2AZaz#include <stdio.h>#inlcude <bios.h>union keyTest{int c;char ch[2];};void main(void){ union keyTest k;while(1){while(bioskey(1)= =0);/* function 1 returns 0 until a key is pressed */k.c = bioskey(0);/* function 0 returns the key that is waiting */printf(“High=[%d],Low=[%d]\n ”,k.c,k .ch[1],k .ch[0]);}}例3:C 提供的随机函数:void randomize(); //初始化随机数发生器int random(int ubound); //返回范围在0到ubound - 1之间的一个随机整数。

2、图形模式不同的显示器适配器(显卡)有不同的图形分辨率。

即是同一显卡, 在不同模式下也有不同分辨率。

因此, 在屏幕作图之前, 必须根据显卡种类将显示器设置成为某种图形模式。

VGALO 0 16色 640*200VGA VGAMED 1 16色 640*350VGAHI 216色 640*480(1)图形模式的初始化在屏幕作图之前, 必须根据显示器适配器种类将显示器设置成为某种图形模式, 在未设置图形模式之前, 微机系统默认屏幕为文本模式(80列, 25行字符模式), 此时所有图形函数均不能工作。

设置屏幕为图形模式, 可用下列图形初始化函数:void initgraph(int *gdriver, int *gmode, char *path);表2. 图形驱动器、模式的符号常数及数值━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━图形驱动器(gdriver) 图形模式(gmode) ──────────────────────色调分辨率符号常数数值符号常数数值━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━CGA 1 CGAC00 C0 320*200CGAC1 1 C1 320*200 CGAC2 2 C2 320*200 CGAC3 3 C3 320*200 CGAHI 4 2色 640*200───────────────────────────────────MCGA 2 MCGAC00 C0 320*200MCGAC1 1 C1 320*200MCGAC2 2 C2 320*200M CGAC3 3 C3 320*200MCGAMED 4 2色 640*200MCGAHI 5 2色 640*480 ───────────────────────────────────EGA 3 EGALO0 16色 640*200EGAHI 1 16色 640*350 ───────────────────────────────────EGA64 4 EGA64LO0 16色 640*200E GA64HI 1 4色 640*350───────────────────────────────────EGAMON 5 EGAMONHI0 2色 640*350───────────────────────────────────IBM8514 6 IBM8514LO0 256色 640*480IBM8514HI 1 256色 1024*768───────────────────────────────────HERC 7 HERCMONOHI0 2色 720*348───────────────────────────────────ATT400 8 ATT400C00 C0 320*200A TT400C1 1 C1 320*200ATT400C2 2 C2 320*200ATT400C3 3 C3 320*200ATT400MED 4 2色 320*200ATT400HI 5 2色 320*200───────────────────────────────────VGA 9 VGALO0 16色 640*200VG AMED 1 16色 640*350VG AHI 2 16色 640*480 ───────────────────────────────────PC3270 10 PC3270HI0 2色 720*350───────────────────────────────────DETECT 0 用于硬件测试━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━例子1:使用图形初始化函数设置VGA高分辨率图形模式#include <graphics.h>int main(){int gdriver, gmode;gdriver=VGA;gmode=VGAHI;initgraph(&gdriver, &gmode, "c:\\tc"); //图形模式初始化bar3d(100, 100, 300, 250, 50, 1); /*画一长方体*/getch();closegraph(); //关闭图形模式,返回默认文本模式return 0;}例子2:自动进行硬件测试后进行图形初始化有时编程者并不知道所用的图形显示器适配器种类, 或者需要将编写的程序用于不同图形驱动器, Turbo C提供了一个自动检测显示器硬件后进行图形初始化的方法。

即用gdriver= DETECT 语句后再跟 initgraph()函数就行了。

相关主题