当前位置:文档之家› C语言图形化编程基础入门

C语言图形化编程基础入门

二、C 的图形模式编程2.1图形编程基础VC+EasyX 库里提供了图形函数就可以在VC 环境下进行图形编程。

对图形函数的操作都是在视口(Viewport )上进行。

用户可以在屏幕上定义大小不同的视口,若不定义视口大小,它就是整个屏幕。

视口是在图形屏幕状态下的概念,用户可访问的最小单位是一个像素(像素这一术语最初用来指显示器上最小的、单独的发光点单元。

然而现在,其含义拓宽为指图形显示器上的最小可访问点)。

文本与图形都可以在视口上显示。

图形视口的左上角坐标为(0,0)。

例如:分辨率为640*480的视口像素点的定位显示器在图形模式下工作时,显示的单位是像素点,通过控制各像素点的颜色和灰度等级来形成图形。

因此绘图的第一步是进行图形模式的初始化,系统进入绘图模式。

(1) initgraph() 图形初始化函数用法: HWND initgraph(int width,int height,int flag = NULL);示例:以下局部代码创建一个尺寸为 640x480 的绘图环境:initgraph(640, 480);例2-1:调用initgraph()设置640*480的图形模式,在屏幕中央显示如下的图形。

参考代码:#include<graphics.h>#include <conio.h>int main(){initgraph(640, 480);line(200, 240, 440, 240);line(320, 120, 320, 360);getch();(closegraph();return 0;}[学习单步执行]试着单步执行刚才的程序,由于绘图和多线程等因素的限制,请务必按照以下步骤尝试(熟练了以后就不用了):1. 将VC取消最大化,并缩小窗口,能看到代码就行。

2. 按一下F10(单步执行),会看到屏幕上出现一个黄色的小箭头,指示将要执行的代码。

3. 当箭头指向initgraph()语句时,按F10,能看到窗口发生了变化。

4. 将新的绘图窗口和VC并排放,相互不要有覆盖。

这步很重要,否则绘图内容将会被VC窗口覆盖。

5. F10执行getch后,记得激活绘图窗口,并按任意键,否则程序不会继续执行。

6. closegraph后,直接按F5执行全部剩余程序,结束。

单步执行很重要,可以让你知道程序执行到哪里是什么效果,哪条语句执行出了问题等等。

例2-2:更进一步,打印出分辨率,并在屏幕中央显示如下的图形参考代码#include <stdio.h>#include<graphics.h>#include <conio.h>#define WIDTH 150 /*矩形的宽度*/#define HEIGHT 100 /*矩形的高度*/int startX,startY; /*矩形的左上角坐标*/int maxX;int maxY;void init(); /*图形模式的初始化*/void showText(); /*显示文本*/void drawK(); /*画图形*/int main(){init();showText();drawK();closegraph();return 0;}void init(){initgraph(640,480);maxX = getmaxx();maxY = getmaxy();setbkcolor(BLACK); /*设置背景色为黑色*/cleardevice(); /*清屏*/}void showText(){char str[50];sprintf(str,"(%d,%d)",maxX,maxY); /*将要显示的分辩率以字符串形式保存到str*/ outtextxy(maxX/4,maxY/4,str); /*在指定位置显示字符串str*/}void drawK(){startX = (maxX-WIDTH)/2;startY = (maxY-HEIGHT)/2;setcolor(WHITE);rectangle(startX,startY,startX+WIDTH,startY+HEIGHT);setcolor(YELLOW);line(startX,startY,startX+WIDTH,startY+HEIGHT);line(startX+WIDTH,startY,startX,startY+HEIGHT);setcolor(RED);circle(maxX/2,maxY/2,30);getch(); //暂停,任意健继续}例2-3:用若干个小矩形块画一个围墙的效果,如下图:参考代码:#include <graphics.h>#include <conio.h>int maxX;int maxY;void init(){initgraph(640,480);maxX = getmaxx()+1;maxY = getmaxy()+1;}void drawWall(void){int i,j;int left,right,top,bottom;setbkcolor(BLACK);cleardevice();setlinecolor(WHITE);left = 50;right = maxX-50;top = 50;bottom = maxY-50;for(i=left;i<=right;i+=10){rectangle(i,top,i+9,top+9);rectangle(i,bottom,i+9,bottom+9);}for(i=top;i<=bottom;i+=10) {rectangle(left,i,left+9,i+9);rectangle(right,i,right+9,i+9);}getch(); /*暂停,任意健继续*/}int main(){init(); /*图形模式初始化*/drawWall(); /*画围墙*/closegraph(); /*关闭图形模式*/return 0;}2.2 学会更多的绘图函数一、常用的绘图函数1、画点、画线putpixel(x, y, c); // 画点(x,y),颜色cline(x1, y1, x2, y2); // 画直线(x1,y1)-(x2,y2),都是整型2、画(空心)圆、椭圆、矩形、画弧、多边形等circle(x, y, r); // 画圆,圆心为(x,y),半径为rellipse(left,top,right,bottom); //画椭圆,参数为外切矩形的左上、右下角的坐标rectangle(left,top,right,bottom); //画矩形,参数为矩形的左上、右下角的坐标arc( int left, int top, int right, int bottom, double stangle, double endangle); //画椭圆弧…3、画(实心)圆、椭圆、矩形等fillcircle(x,y,r); //画填充圆(有边框)。

fillellipse(left,top,right,bottom); //画填充的椭圆(有边框)。

fillrectangle(left,top,right,bottom)); //画填充矩形(有边框)。

solidcircle(x,y,r); //画填充圆(无边框)。

solidellispe(left,top,right,bottom); //画填充的椭圆(无边框)。

soliderectangle (left,top,right,bottom); //画填充圆(无边框)。

…还有很多绘图函数,请参考绘图帮助文件。

二、设置画线颜色void setlinecolor(COLORREF color); // 设置画线颜色(1)常用的颜色常量可以用:BLACK 黑 DARKGRAY 深灰BLUE 蓝 LIGHTBLUE 亮蓝GREEN 绿 LIGHTGREEN 亮绿CYAN 青 LIGHTCYAN 亮青RED 红 LIGHTRED 亮红MAGENTA 紫LIGHTMAGENTA 亮紫BROWN 棕 YELLOW 黄LIGHTGRAY 浅灰 WHITE 白(2)配出更多的颜色颜色除了前面写的16种以外,还可以自由配色。

格式:RGB(r, g, b)r / g / b 分别表示红色、绿色、蓝色,范围都是0~255。

例如,RGB(255,0,0) 表示纯红色。

红色和绿色配成黄色,因此RGB(255, 255, 0) 表示黄色。

嫌调色麻烦可以用画笔里面的调色试试,调好了以后直接将数值抄过来就行。

例如,画两条红色浓度为200的直线,可以这么写:setlinecolor(RGB(200, 0, 0));line(100, 100, 200, 100);line(100, 120, 200, 120);(3)用数字表示颜色除了用RGB(r,g,b)方式外,还可以用16进制表示颜色,格式:0xbbggrr例如,setlinecolor(0x0000ff) 和setlinecolor(RGB(255, 0, 0)) 是等效的。

例2-4:编程实现红色、蓝色交替画线#include<graphics.h>#include <stdio.h>#include <conio.h>int main(){initgraph(640, 480);for(int y=100; y<200; y+=10) {if ( y/10 % 2 == 1) // 判断奇数行偶数行setcolor(RGB(255,0,0));elsesetcolor(RGB(0,0,255));line(100, y, 300, y);}getch();closegraph();return 0;}例2-5:画一个圆形的渐变色。

#include <graphics.h>#include <conio.h>#include <math.h>#define PI 3.14int main(){initgraph(640, 480);int c;double a;int x, y, r = 200;for(a = 0; a < PI * 2; a += 0.0001) {x=(int)(r * cos(a) + 320 + 0.5);y=(int)(r * sin(a) + 240 + 0.5);c=(int)(a * 255 / (2 * PI) + 0.5);setcolor(RGB(c, 0, 0));line(320, 240, x, y);}getch();closegraph();return 0;}作业:画10个颜色渐变的同心圆,半径以30递增,颜色为红在[0—255]内十等分。

相关主题