计算机图形图像学实验指导书
2010-12-26 20:14
344 查看
1.1 C语言图形程序设计基础
1.1.1屏幕显示方式与坐标系
1.文本方式与坐标系
在屏幕上只能显示字符的方式称为文本方式。在文本方式下,屏幕上可以显示的最小单位就是字符。为了能在指定位置显示每个字符,C语言提供了字符坐标系,字符坐标系原点为(1,1),水平为x轴,分为若干列;垂直方向为y轴,分为若干行。
Turbo C支持以下6种不同显示方式:
v
BW40:
40*25 黑白
v
C40:
40*25 彩色
v
BW80:
80*25 黑白
v
C80: 80*25
彩色
v
MONO: 80*25
单色
v
C4350:
EGA 80*43;VGA 80*45 彩色
2.图形方式
在屏幕上显示图形的方式称为图形方式。图形方式下,屏幕上每个像素的显示位置用点坐标来描述。在此坐标系统中,屏幕左上角为坐标原点(0,0),水平方向为x轴,自左向右;垂直方向为y轴,自上向下。分辨率不同,max x、max y也不同。
1.1.2图形驱动程序与图形模式
1.图形驱动程序
2.图形模式
1.1.3图形系统初始化和模式控制
Turbo C的图形函数均在头文件“graphics.h”中定义,所以凡是要用到这些函数的程序,在程序文件的开头都要些上文件包含命令:
#include<graphics.h>
1.
图形系统初始化函数
void for initgraph(int *gdriver,int*gmode,char*path)
gdriver:指定要装入的图形驱动程序
gmode:设置图形显示模式
path:指明驱动程序所在路径
1)已知显示器类型的图形系统初始化:
v #include <graphics.h>
v main()
v {
v int gdriver,gmode;
v gdriver=CGA;
v gmode=CGAC0;
v initgraph(&gdriver,&gmode,
"g://Win-TC");
v bar3d(10,20,50,80,0,0);
v getch();
v closegraph();
v }
2)自动初始化图形系统:
v #include<graphics.h>
v main()
v {
v int gdriver=DETECT,gmode;
v initgraph(&gdriver,&gmode,
"g://Win-TC");
v bar3d(10,20,50,80,0,0);
v getch();
v closegraph();
v }
2.图形系统的关闭
void far closegraph();
3.图形模式的控制
1)返回当前图形模式值int far getgraphmode(void);
2)恢复屏幕在图形初始化前模式
void far restorecrtmode(void)
3)设置系统图形模式并清屏幕
void far setgraphmode(int gmode);
4)获取图形驱动器可使用的模式范围
void far getmoderang(int driver,int
*lomode,int*himode);
例:
#include<stdio.h>
#include<graphics.h>
main()
{
int gdriver,gmode,lo,hi; gdriver=CGA;
getmoderange(CGA,&lo,&hi);
printf("CGA supporting modes range
from %d to %d/n",lo,hi);
Initgraph(&gdriver,&lo, "g://Win-TC");
bar3d(100,30,130,150,0,0);
getch();
gmode=getgraphmode();
restorecrtmode();
printf("now in text mode,press any key back to
graphics mode./n");
getch();
setgraphmode(gmode);
rectangle(50,30,100,130);
getch();
closegraph();
}
1.1.4图形坐标的设置
1、定点
1)把当前光标移到所需的位置 void far moveto(int x,int y);
2)以增量方式移动当前光标 void far moverel(int deltax,int deltay);
2、读取当前光标位置 int far getx(void);int far
gety(void);
3、读取x,y轴的最大值 int far getmaxx(void);int far getmaxy(void);
例:
显示系统中图形硬件支持的最大的x,y值
#include<stdio.h>
#include<graphics.h>
main()
{ int
gdriver,gmode;
gdriver=CGAC0;
initgraph(&gdriver,&gmode, " ");
printf("max x,y is
%d,%d",getmaxx(),getmaxy());
getch();
restorecrtmode();
}
例:画一王字
#include<graphics.h>
main()
{ int
gdriver=DETECT,gmode;
int x,y;
initgraph(&gdriver,&gmode, " ");
cleardevice();
moveto(100,40),
linerel(40,0);
x=getx(); y=gety();
moveto(x,y+20);
linerel(-40,0);
moverel(0,20); linerel(40,0);
moverel(-20,0); linerel(0,-40);
getch();
closegraph();
}
1.1.5屏幕窗口操作
1、图形屏幕处理
1)清除图形屏幕void far cleardevice(void);
例:
#include<graphics.h>
main()
{
int gdriver,gmode;
gdriver=VGA;
gmode= VGALO;
initgraph(&gdriver,&gmode, " ");
cleardevice();
bar3d(10,20,50,180,0,0,);
getch();
closegraph();
}
2)设置图形输出活动页void far setactivepage(int page);
3)设置可见图形页号void far setvisualpage(int page);
#include<graphics.h>
main()
{ int
gdriver,gmode;
gdriver=VGA;gmode=VGAHI;
initgraph(&gdriver,&gmode, " ");
cleardevice();
setactivepage(1);
circle(150,130,80);
setactivepage(0);
rectangle(40,160,90,180);
getch();
setvisualpage(1); getch();
setvisualpage(0); getch();
closegraph();
}
2、屏幕窗口操作
1)清除当前图形窗口
void far clearviewport(void);
2)设置图形窗口
void far setviewport(int left,int top,int right,int
bottom,int clipflag);
说明:若clipflag为1,则超出窗口的输出自动剪裁掉,若clipflag为0,则图形窗口之外不被剪裁
例:
#include<graphics.h>
main()
{ int
gdriver=CGA,gmode=0;
initgraph(&gdriver,&gmode, "
");
rectangle(30,25,80,80);
setviewport(30,25,80,80,0);
line(0,0,100,150);getch();
clearviewport();getch();
cleardevice();getch();
setviewport(20,15,80,80,1);
rectangle(0,0,60,65);
line(0,0,100,150);getch();
closegraph();
}
1.2图形颜色设置
1.2.1颜色的设置
1.设置当前背景色 void far setbkcolor(int
color);
下表列出背景色名称和数值的对应关系。缺省时,默认值为0,即黑色。
2.设置当前画图颜色void far setcolor(int color)
例:将画笔设置为红色,画一圆
#include"graphics.h"
main()
{
int
gdrive=EGA,gmode=EGAHI;
initgraph(&gdrive,&gmode,"");
setbkcolor(1);
setcolor(RED);
circle(120,100,50);
getch();
closegraph();
}
2.2.2调色板
根据颜色控制方法不同,可以把支持的颜色屏幕划分为两类:一类是CGA;另一类是EGA,包括EGA和VGA适配器。
1.CGA调色板
低分辨率方式下,显示4种颜色
高分辨率方式下,显示2种颜色
例如: int gdrive=CGA,gmode=CGAC1;
initgraph(&gdrive,&gmode,"");
……
setcolor(CGA-WHITE);
……
2.EGA调色板(共64色,调色板16色)
3.改变调色板的一种颜色
void far setpalette(int oldcolor,int newcolor);
CGA模式,只有背景色能改变oldcolor=0
例如:setpalette(0,GREEN);
EGA模式,oldcolor是背景色表中任一种颜色, newcolor是上表3.5任一种颜色
例如:setpalette(BLUE,EGA-GREEN);
或setpalette(1,2);
2.2.3读取颜色信息
1.读取当前背景颜色 int far getbkcolor(void)
例如:printf(“background color is %d”,getbkcolor());
2.读取当前画图颜色int far getcolor(void)
3.读取最高可用颜色数int far getmaxcolor(void)
返回当前模式下最大有效颜色值。在EGA模式下返回最大值15,在CGA模式下,返回最大值3
4.在点(x,y)处画一规定颜色点
void far putpixel(int x,int y,int
color);
5.读取点(x,y)的颜色
int far getpixel(int x,int y);
例:在不同位置画点
#include"graphics.h"
main()
{ int
gdriver=DETECT,gmode;
int color,i,max,bkcolor,brushcolor;
initgraph(&gdriver,&gmode,"");
max=getmaxcolor();
for(i=0;i<20;i++)
putpixel(50+i*10,20,(max-5));
color=getpixel(50,20);
putpixel(150,150,color);
brushcolor=getcolor();
bkcolor=getbkcolor();
printf("background color is %d ,brush color is %d , color is
%d", bkcolor,brushcolor,color);
putpixel(200,150,brushcolor);
getch();
closegraph();
}
1.1.1屏幕显示方式与坐标系
1.文本方式与坐标系
在屏幕上只能显示字符的方式称为文本方式。在文本方式下,屏幕上可以显示的最小单位就是字符。为了能在指定位置显示每个字符,C语言提供了字符坐标系,字符坐标系原点为(1,1),水平为x轴,分为若干列;垂直方向为y轴,分为若干行。
Turbo C支持以下6种不同显示方式:
v
BW40:
40*25 黑白
v
C40:
40*25 彩色
v
BW80:
80*25 黑白
v
C80: 80*25
彩色
v
MONO: 80*25
单色
v
C4350:
EGA 80*43;VGA 80*45 彩色
2.图形方式
在屏幕上显示图形的方式称为图形方式。图形方式下,屏幕上每个像素的显示位置用点坐标来描述。在此坐标系统中,屏幕左上角为坐标原点(0,0),水平方向为x轴,自左向右;垂直方向为y轴,自上向下。分辨率不同,max x、max y也不同。
1.1.2图形驱动程序与图形模式
1.图形驱动程序
符号常量 | 数值 | 符号常量 | 数值 |
DETELT | 0 | IBM8514 | 6 |
CGA | 1 | HERCMONO | 7 |
MCGA | 2 | ATT400 | 8 |
EGA | 3 | VGA | 9 |
EGA64 | 4 | PC3270 | 10 |
EGAMONO | 5 |
驱动程序 | 图形模式 | 值 | 分辨率 | 调色板 |
CGA | CGAC0 | 0 | 320*200 | C0 |
CGAC1 | 1 | 320*200 | C1 | |
CGAC2 | 2 | 320*200 | C2 | |
CGAC3 | 3 | 320*200 | C3 | |
CGAC4 | 4 | 640*200 | 2色 | |
EGA | EGAHI | 0 | 640*200 | 16色 |
EGALO | 1 | 640*350 | 16色 | |
VGA | VGALO | 0 | 640*200 | 16色 |
VGAMED | 1 | 640*350 | 16色 | |
VGAHI | 2 | 640*480 | 16色 |
Turbo C的图形函数均在头文件“graphics.h”中定义,所以凡是要用到这些函数的程序,在程序文件的开头都要些上文件包含命令:
#include<graphics.h>
1.
图形系统初始化函数
void for initgraph(int *gdriver,int*gmode,char*path)
gdriver:指定要装入的图形驱动程序
gmode:设置图形显示模式
path:指明驱动程序所在路径
1)已知显示器类型的图形系统初始化:
v #include <graphics.h>
v main()
v {
v int gdriver,gmode;
v gdriver=CGA;
v gmode=CGAC0;
v initgraph(&gdriver,&gmode,
"g://Win-TC");
v bar3d(10,20,50,80,0,0);
v getch();
v closegraph();
v }
2)自动初始化图形系统:
v #include<graphics.h>
v main()
v {
v int gdriver=DETECT,gmode;
v initgraph(&gdriver,&gmode,
"g://Win-TC");
v bar3d(10,20,50,80,0,0);
v getch();
v closegraph();
v }
2.图形系统的关闭
void far closegraph();
3.图形模式的控制
1)返回当前图形模式值int far getgraphmode(void);
2)恢复屏幕在图形初始化前模式
void far restorecrtmode(void)
3)设置系统图形模式并清屏幕
void far setgraphmode(int gmode);
4)获取图形驱动器可使用的模式范围
void far getmoderang(int driver,int
*lomode,int*himode);
例:
#include<stdio.h>
#include<graphics.h>
main()
{
int gdriver,gmode,lo,hi; gdriver=CGA;
getmoderange(CGA,&lo,&hi);
printf("CGA supporting modes range
from %d to %d/n",lo,hi);
Initgraph(&gdriver,&lo, "g://Win-TC");
bar3d(100,30,130,150,0,0);
getch();
gmode=getgraphmode();
restorecrtmode();
printf("now in text mode,press any key back to
graphics mode./n");
getch();
setgraphmode(gmode);
rectangle(50,30,100,130);
getch();
closegraph();
}
1.1.4图形坐标的设置
1、定点
1)把当前光标移到所需的位置 void far moveto(int x,int y);
2)以增量方式移动当前光标 void far moverel(int deltax,int deltay);
2、读取当前光标位置 int far getx(void);int far
gety(void);
3、读取x,y轴的最大值 int far getmaxx(void);int far getmaxy(void);
例:
显示系统中图形硬件支持的最大的x,y值
#include<stdio.h>
#include<graphics.h>
main()
{ int
gdriver,gmode;
gdriver=CGAC0;
initgraph(&gdriver,&gmode, " ");
printf("max x,y is
%d,%d",getmaxx(),getmaxy());
getch();
restorecrtmode();
}
例:画一王字
#include<graphics.h>
main()
{ int
gdriver=DETECT,gmode;
int x,y;
initgraph(&gdriver,&gmode, " ");
cleardevice();
moveto(100,40),
linerel(40,0);
x=getx(); y=gety();
moveto(x,y+20);
linerel(-40,0);
moverel(0,20); linerel(40,0);
moverel(-20,0); linerel(0,-40);
getch();
closegraph();
}
1.1.5屏幕窗口操作
1、图形屏幕处理
1)清除图形屏幕void far cleardevice(void);
例:
#include<graphics.h>
main()
{
int gdriver,gmode;
gdriver=VGA;
gmode= VGALO;
initgraph(&gdriver,&gmode, " ");
cleardevice();
bar3d(10,20,50,180,0,0,);
getch();
closegraph();
}
2)设置图形输出活动页void far setactivepage(int page);
3)设置可见图形页号void far setvisualpage(int page);
#include<graphics.h>
main()
{ int
gdriver,gmode;
gdriver=VGA;gmode=VGAHI;
initgraph(&gdriver,&gmode, " ");
cleardevice();
setactivepage(1);
circle(150,130,80);
setactivepage(0);
rectangle(40,160,90,180);
getch();
setvisualpage(1); getch();
setvisualpage(0); getch();
closegraph();
}
2、屏幕窗口操作
1)清除当前图形窗口
void far clearviewport(void);
2)设置图形窗口
void far setviewport(int left,int top,int right,int
bottom,int clipflag);
说明:若clipflag为1,则超出窗口的输出自动剪裁掉,若clipflag为0,则图形窗口之外不被剪裁
例:
#include<graphics.h>
main()
{ int
gdriver=CGA,gmode=0;
initgraph(&gdriver,&gmode, "
");
rectangle(30,25,80,80);
setviewport(30,25,80,80,0);
line(0,0,100,150);getch();
clearviewport();getch();
cleardevice();getch();
setviewport(20,15,80,80,1);
rectangle(0,0,60,65);
line(0,0,100,150);getch();
closegraph();
}
1.2图形颜色设置
1.2.1颜色的设置
1.设置当前背景色 void far setbkcolor(int
color);
下表列出背景色名称和数值的对应关系。缺省时,默认值为0,即黑色。
符号常量 | 数值 | 含义 | 符号常量 | 数值 | 含义 |
BLACK | 0 | 黑色 | LIGHTBLUE | 9 | 浅蓝 |
BLUE | 1 | 蓝色 | LIGHTGREEN | 10 | 浅绿 |
GREEN | 2 | 绿色 | LIGHTYAN | 11 | 浅青 |
CYAN | 3 | 青色 | LIGHTRED | 12 | 浅红 |
RED | 4 | 红色 | LIGHTMAGENTA | 13 | 浅洋红 |
MAGENTA | 5 | 洋色 | YELLOW | 14 | 黄色 |
BROWN | 6 | 棕色 | WHITE | 15 | 白色 |
LIGHTGRAY | 7 | 浅灰 | |||
DARKGRAY | 8 | 深灰 |
例:将画笔设置为红色,画一圆
#include"graphics.h"
main()
{
int
gdrive=EGA,gmode=EGAHI;
initgraph(&gdrive,&gmode,"");
setbkcolor(1);
setcolor(RED);
circle(120,100,50);
getch();
closegraph();
}
2.2.2调色板
根据颜色控制方法不同,可以把支持的颜色屏幕划分为两类:一类是CGA;另一类是EGA,包括EGA和VGA适配器。
1.CGA调色板
调色板号 | 颜色0 | 颜色1 | 颜色2 | 颜色3 |
CGAC0 | 背景色 | CGA-LIGHTGREEN | CGA-LIGHTRED | CGA_YELLOW |
CGAC1 | 背景色 | CGA_LIGHTCYAN | CGA_LIGHTMAGENTA | CGA_WHITE |
CGAC2 | 背景色 | CGA_GREEN | CGA_RED | CGA_YELLOW |
CGAC3 | 背景色 | CGA_CYAN | CGA_MAGENTA | CGA_YELLOW |
高分辨率方式下,显示2种颜色
例如: int gdrive=CGA,gmode=CGAC1;
initgraph(&gdrive,&gmode,"");
……
setcolor(CGA-WHITE);
……
2.EGA调色板(共64色,调色板16色)
符号常量 | 数值 | 含义 | 符号常量 | 数值 | 含义 |
EGA-BLACK | 0 | EGA黑色 | EGA-DARKGRAY | 56 | EGA深灰 |
EGA-BLUE | 1 | EGA蓝色 | EGA-LIGHTBLUE | 57 | EGA浅蓝 |
EGA-GREEN | 2 | EGA绿色 | EGA-LIGHTGREEN | 58 | EGA浅绿 |
EGA-CYAN | 3 | EGA青色 | EGA=LIGHTCYAN | 59 | EGA浅青 |
EGA-RED | 4 | EGA红色 | EGA-LIGHTRED | 60 | EGA浅红 |
EGA-MAGENTA | 5 | EGA洋红 | EGA-LIGHTMACENTA | 61 | EGA浅洋红 |
EGA-LIGHTGARY | 7 | EGA浅灰 | EGA-YELLOW | 62 | EGA黄色 |
EGA-BROWN | 20 | EGA棕色 | EGA-WHITE | 63 | EGA白色 |
void far setpalette(int oldcolor,int newcolor);
CGA模式,只有背景色能改变oldcolor=0
例如:setpalette(0,GREEN);
EGA模式,oldcolor是背景色表中任一种颜色, newcolor是上表3.5任一种颜色
例如:setpalette(BLUE,EGA-GREEN);
或setpalette(1,2);
2.2.3读取颜色信息
1.读取当前背景颜色 int far getbkcolor(void)
例如:printf(“background color is %d”,getbkcolor());
2.读取当前画图颜色int far getcolor(void)
3.读取最高可用颜色数int far getmaxcolor(void)
返回当前模式下最大有效颜色值。在EGA模式下返回最大值15,在CGA模式下,返回最大值3
4.在点(x,y)处画一规定颜色点
void far putpixel(int x,int y,int
color);
5.读取点(x,y)的颜色
int far getpixel(int x,int y);
例:在不同位置画点
#include"graphics.h"
main()
{ int
gdriver=DETECT,gmode;
int color,i,max,bkcolor,brushcolor;
initgraph(&gdriver,&gmode,"");
max=getmaxcolor();
for(i=0;i<20;i++)
putpixel(50+i*10,20,(max-5));
color=getpixel(50,20);
putpixel(150,150,color);
brushcolor=getcolor();
bkcolor=getbkcolor();
printf("background color is %d ,brush color is %d , color is
%d", bkcolor,brushcolor,color);
putpixel(200,150,brushcolor);
getch();
closegraph();
}
相关文章推荐
- 计算机图形图像处理 实验一
- 计算机图形图像处理 实验二
- 计算机图形图像处理 实验一
- 常用计算机视觉实验图像库和图像集
- 常用计算机视觉实验图像库和图像集
- 常用计算机视觉实验图像库和图像集
- 图形图像实验-二值分割代码
- 句柄和指针的区别和联系是什么?[英国某著名计算机图形图像公司面试题]
- 计算机图形图像领域的主要期刊和会议,资源共享
- 计算机视觉-实验常用图像数据集
- Atitit.计算机图形图像图片处理原理与概论attilax总结
- 5.数字图像处理及mtlab 实现-学习及实验指导 imsubtract函数
- 计算机视觉中经常需要识别或者定位某些几何图形,比如直线、圆、椭圆,还有其他一些图形。检测直线的霍夫变换提供了在图像中寻找直线的一种算法,是最简单的一种情形,后来发展到检测圆、椭圆、还有一般图形的霍夫变
- Atitit.计算机图形图像图片处理原理与概论attilax总结
- 计算机视觉与图形图像会议、学派的一点八卦和资料
- 【计算机图形2】实验2: 扫描线填充算法+Z-buffer被00覆盖点消除
- 计算机图形图像资源
- 【杂谈】数学,计算机视觉,图形图像处理
- 我理解的图形、图像、计算机视觉、虚拟现实
- 常用计算机视觉实验图像库和图像集