一、屏幕和视口设置与清除函数
36. setviewport() 设置图形视口函数
37. clearviewport()清除图形视口函数
38. cleardevice() 清除屏幕函数
39. getviewsettings() 获取图形视口设置函数
二、调色板和颜色函数
40. setpalette()设置调色板函数
41. setallpalette()设置整个调色板函
42. setbackcolor() 设置背景颜色函数
43. setcolor() 设置颜色函数
44. getbkcolor() 返回背景色函数
45. getcolor() 返回当前绘图颜色
46. getmaxcolor()返回最大颜色值函数
47. getpalette() 获取调色板函数
48. getpalettesize() 返回调色板大小函数
49. getdefaultpalette() 获取缺省调色板函数
三、屏幕位置函数
50. getmaxx()返回最大x坐标函数
51. getmaxy() 返回最大y坐标函数
52. getx() 返回x坐标函数
53. gety() 返回y坐标函数
54. moveto()函数
55. moverel() 相对移动函数
----------------------------------------------------
Borland C++提供了一整套综合性的图形函数,上节介绍了其中有关图形显示的函数,本节介绍其中的绘图函数,下节将介绍它的图形文本函数。
一般绘图时,首先要清除屏幕,设置图形视口,设置绘图颜色,然后在屏幕上某个位置画点或直线或曲线等。下面给出具有这些功能的函数。
一、屏幕和视口设置与清除函数
36. setviewport() 设置图形视口函数
功能: 函数setviewport() 设置当前图形视口。
用法: 函数调用方式为void setviewport(int left,int top,int right,int bottom,int clip);
说明: 参数left,top是左上角坐标,right,bottom是右下角坐标,它们都是绝对屏幕坐标。
传给setviewport()的第五个参数是clip,如果clip为1,则超出视口的输出图形自动被裁剪掉,即所有作图限制于当前图形视口之内,如果clip为0,则不做裁剪,即作图将无限制地扩展于视口周界之外,直到屏幕边界。若无效参数传入setviewport(),则graphresult()函数返回值-11,先前视口设置仍有效。
setviewport()函数的对应头文件为 graphics.h
返回值: 无
例: 建立对角为(6,6)和(88,88)的视口,并带有裁剪功能:
setviewport(6,6,88,88,1);
37. clearviewport()清除图形视口函数
功能: 函数clearviewport()清除当前图形视口,并把光标从当前位置移到原点(0,0)。
用法: 该函数调用方式为void clearviewport(void);
说明: 此函数调用执行后,当前图形视口将不复存在。
这个函数对应的头文件是graphics.h
返回值: 无
例: 清除当前图形视口,但并非整个屏幕:
clearviewport();
38. cleardevice() 清除屏幕函数
功能: 函数cleardevice() 清除整个屏幕,并且将当前位置移到屏幕原点。
用法: 此函数调用方式为void cleardevice(void);
说明: 该函数类似于文本模式下的函数clrscr(),但clrscr()函数不能在图形方式下工作;同样cleardevice()函数不能在文本模式下工作。
这个函数相应的头文件为graphics.h
返回值: 无
例: 清除当前整个屏幕:
cleardevice();
39. getviewsettings() 获取图形视口设置函数
功能: 函数getviewsettings()返回当前图形视口坐标和裁剪标志,坐标是绝对屏幕坐标,裁剪标志 1或 0。
用法: 此函数调用方式为void getviewsettings(struct viewporttype *info);
说明: 该函数执行后,把有关当前视口的信息装入info指向的viewporttype型结构中。
viewporttype结构定义如下:
struct viewporttype {
int left,top,right,bottom;
int clipflag;
}
这里left,top中存放视口左上角坐标,right,bottom中存放视口右下角坐标,clipflag中存放裁剪标志,若clipflag为1 ,执行裁剪以防止超出视口边界,如果clipflag为0,则不对超出边界输出作裁剪。
getviewsettings()函数对应的头文件是graphics.h
返回值: 无
例: 显示当前视口角点坐标:
struct viewporttype info;
getviewsettings(&info);
printf("left:%d top:%d\n",info.left,info.top);
printf("right:%d bottom:%d\n",info.right,info.bottom);
二、调色板和颜色函数
进行图形显示或绘图,除了要知道用什么显示卡以及相应的图形驱动程序外,还必须了解它们支持什么样的调色板颜色。
40. setpalette()设置调色板函数
功能: 函数setpalette()可对调色板上的颜色的色彩值重新设定。
用法: setpalette()函数调用方式为void setpalette(int value,int color);
说明: 参数value为色彩值,color为色彩值相应的颜色名。当需要将一颜色指定为一色彩值地,即可调用此函数来设置。
表1-7 预先定义的调色板与色彩
-----------------------------------------------------------------
调色板 色彩0 色彩1 色彩2 色彩3
-----------------------------------------------------------------
C0 黑色 淡绿 红浅 黄色
C1 黑色 淡青 粉红 白色
C2 黑色 绿色 红色 棕色
C3 黑色 青色 品粉红 淡灰色
-----------------------------------------------------------------
这个函数相对应的头文件为graphics.h
返回值: 无
41. setallpalette()设置整个调色板函数
功能: 函数setallpalette()对某个调色板上的所有颜色重新设定彩色值。
用法: 函数调用方式为void setallpalette(struct palettetype *p);
说明: 在低分辨率图形显示模式下,该函数无效。若函数调用成功,则把p指向的palettetype结构中的色彩值设置为当前调色板所有颜色的新色彩值。
palettetype结构定义如下:
struct palettetype {
unsigned char size;
signed char color[16];
};
这里必须把size设置为调色板颜色的数目,并把每个色彩值都装入color数组相应元素中,然后才可用于调用函数。
此函数对应的头文件是graphics.h
返回值: 无
例:把16色的EGA/VGA显示卡调色板改为其前16种颜色:
struct palettetype;
int i;
for(i=0;i<16;i++) p.color[i]=i;
p.size=16;
setallpalette(&p);
42. setbackcolor() 设置背景颜色函数
功能: 函数setbackcolor()把当前调色板颜色的第一个值改成指定的颜色值,以设置背景颜色。
用法: 此函数调用方式为void setbackcolor(int color);
说明: 参数color为指定的背景色,其有效值可以是颜色符号名,也可以是色彩值。表1-8列出了背景颜色供选取。
表1-8 背景颜色值
-----------------------------------------------------------------
颜色符号名 色彩值 颜色符号名 色彩值
-----------------------------------------------------------------
BLACK(黑色) 0 DARKGRAY(深灰) 8
BLUE(蓝色) 1 LIGHTBLUE(淡蓝) 9
GREEN(绿色) 2 LIGHTGREEN(淡绿) 10
CYAN(青色) 3 LIGHTCYAN(淡青) 11
RED(红色) 4 LIGHTRED(淡红) 12
MAGENTA(品红) 5 LIGHTMAGENTA(粉红) 13
BROWN(棕色) 6 YELLOW(黄色) 14
LIGHTGRAY(淡灰) 7 WHITE(白色) 15
-----------------------------------------------------------------
调用该函数,将改变整个屏幕的颜色,如果新的背景色与原来屏幕的图形颜色相同,尽管图形信息不会丢失,但是看不见图形了。如果所选背景色为对比鲜明的颜色,看不见的图形就会重新清晰地显现出来。
这个函数的头文件为graphics.h
返回值: 无
例: 把背景色置为淡蓝色
setbackcolor(LIGHTBLUE);
43. setcolor() 设置颜色函数
功能: 函数setcolor()设置当前绘图颜色(或称做前景色)。
用法: 该函数调用方式为voids setcolor(int color);
说明: 参数color为选择的当前绘图颜色。在高分辨率显示模式下,选取的color是实际色彩值,也可以用颜色符号名表示。如果已经摇篮函数setpalette()改变了调色板色彩值,那么符号名就不可能产生预期作用了。
在低分辨率显示模式(320X200)下,选取的color是调色板颜色号,不是实际色彩值。
此函数相应的头文件为graphics.h
返回值: 无
例: 设置16种不同的颜色,显示16段直线:
#include<graphics.h>
void main()
{
int driver,mode;
int i;
driver=DETECT;
mode=0;
initgraph(&driver,&mode,"");
moveto(0,200);
for(i=0;i<16;i++)
{
setcolor(i);
linerel(20,0);
}
getch();
restorecrtmode();
}
44. getbkcolor() 返回背景色函数
功能: 函数getbackcolor()返回当前背景颜色。
用法: 函数调用方式为int getbackcolor(void);
说明: 调用该函数后,获得背景色,但其值不一定是调色板上的色彩值。
这个函数对应的头文件是graphics.h
返回值: 返回当前绘图色彩值。
例: 返回当前背景色彩值:
printf("background color is %d", getbkcolor());
45. getcolor() 返回当前绘图颜色
用法: 此函数调用方式为int getcolor(void);
说明: 对于使用彩色低分辨率显示模式调色板,返回值是调色板颜色号,而不是实际颜色值,对于高分辨率显示模式,返回值对应于颜色值,除非调色板颜色已被函数setpalette()或setallpalette()改变了。
这个函数相应的头文件为graphics.h
返回值: 返回当前绘图颜色值。
例: printf("drawing color is %d",getcolor());
46. getmaxcolor()返回最大颜色值函数
用法: 函数调用方式为int getmaxcolor(void);
说明: 该函数调用后,在低分辨率模式下返回值为3(这种模式下有效颜色值为0至3);在高分辨率显示模式下返回值可以是256或更高(此模式下有效颜色值为0至256或更高)。
这个函数相应的头文件为graphics.h
返回值: 返回当前图形模式下最大颜色值。
例: 显示最大有效颜色值:
#include<graphics.h>
void main()
{
int driver,mode;
driver=DETECT;
mode=0;
initgraph(&driver,&mode,"");
printf(";largest color: %d",getmaxcolor());
getch();
restorecrtmode();
}
47. getpalette() 获取调色板函数
功能: 函数getpalette()将当前调色板的值填 入palettetype型结构中。
用法: getpalette()函数调用方式为void getpalette(struct palettetype *p);
说明: 此函数调用执行后,当前调色板的值被装入p指向的结构里;从而可从该结构中获得这个调色板的设置信息。
palettetype型结构定义如下
#define MAXCOLORS 15
struct palettetype {
unsigned char size;
signed char colors[MAXCOLORS+1];
};
其中size用于存放当前调色板的有效颜色个数;colors数组的每一元素中装入调色板的一个相应颜色值。
表1-9 列出了这些颜色值(适用于EGA/VGA)
---------------------------------------------------
颜色符号名 色彩值
---------------------------------------------------
EGA_BLACK(EGA黑色) 0
EGA_BLUE(EGA蓝色) 1
EGA_GREEN(绿色) 2
EGA_CYAN(EGA青色) 3
EGA_RED(红色) 4
EGA_MAGENTA(EGA品红) 5
EGA_BROWN(EGA棕色) 20
EGA_LIGHTGRAY(EGA淡灰) 7
EGA_DARKGRAY(EGA深灰) 56
EGA_LIGHTBLUE(EGA淡蓝) 57
EGA_LIGHTGREEN(EGA淡绿) 58
EGA_LIGHTCYAN(EGA淡青) 59
EGA_LIGHTRED(EGA淡红) 60
EGA_LIGHTMAGENTA(EGA粉红) 61
EGA_YELLOW(EGA黄色) 62
EGA_WHITE(EGA白色) 63
---------------------------------------------------
getpalette()函数对应的头文件是graphics.h
返回值: 无
例: 显示由自动检测所得显示模式支持的调色板上的颜色数目:
#include<graphics.h>
void main()
{
int driver,mode;
struct palettetype p;
driver=DETECT; // 自动检测
mode=0;
initgraph(&driver,&mode,"");
getpalette(7p);
printf("number of colors palette: %d", p.size);
getch();
restorecrtmode();
}
48. getpalettesize() 返回调色板大小函数
功能: 函数getalettesize()返回调色板的颜色数目。
用法: 该函数调用方式为int getpalettesize((void);
说明: 调用这个函数后,就知道调色板上有多少颜色数目可在当前显示模式下设置。
此函数对应的头文件是graphics.h
返回值: 返回当前显示模式支持的调色板的颜色数目。
例: 显示当前显示模式支持的调色板的颜色数目。
int number;
number=getpalettesize();
printf("palette size: %d",number);
49. getdefaultpalette() 获取缺省调色板函数
功能: 函数getdefaultpalette() 返回指向缺省调色板的指针。
用法: 该函数调用方式为struct palettetype *getdefaultpalette(void);
说明: 调色板结构类型palettetype定义如下:
#define MAXCOLORS 15
struct palettetype {
unsigned char size;
signed char colors[MAXCOLORS+1];
};
在调用initgraph()初始化图形系统时,给调色板结构类型变量赋值,作为缺省调色板,调用这个函数可返回指向它的指针。
此函数相应的头部文件为graphics.h
返回值: 返回指向缺省调色板(结构)的指针。
例: 显示图形系统初始化后所支持的调色板上的各种颜色。
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
int graphdriver=DETECT,graphmode;
struct palettetype *palette;
int errorcode,color;
initgraph(&graphdriver,&graphmode,"");
errorcode=graphresult();
if(errorcode!=grOK){
printf("Graphics error %s\n",grapherrormsg(errorcode));
exit(1);
}
palette=getdefaultpalette();
printf("palette->size %d\n",palette->size);
getch();
for(color=0;color<palette->size;color++)
{
setfillstyle(LINE_FILL,color);
bar(20*(color-1),0,20*color,20);
getch();
}
if(palette->size>1){
do
setpalette(random(palette->size),random(palette->size));
while(!kbhit());
getch();
}
setallpalette(palette);
closegraph();
}
三、屏幕位置函数
在图形模式下,字符屏幕坐标被像素坐标取代了,这种像素坐标根据不同的显示硬件,水平与垂直方向的分辨率可以从320X200变化到1280X1024等。由于分辨率的变化,以致要加载合适的图菜驱动程序,因此大多数图形程序是通过检测硬件开始的,然后使用getmaxx()和getmaxy()等函数来决定屏幕尺寸,调整随后的操作来适应这些屏幕限制。
50. getmaxx()返回最大x坐标函数
功能: 函数getmaxx()返回当前图形模式下的最大x坐标,即最大横向坐标。
用法: 函数调用方式为int maxx(void);
说明: 此函数独立于图形视口设置,仅取决于显示卡的显示模式相应的分辨率。
这个函数对应的头文件是graphics.h
返回值: 返回当前显示模式最大x坐标值。
例: 使用本函数的例子见51.getmaxy()函数的例子中。
51. getmaxy() 返回最大y坐标函数
功能: 函数getmaxy()返回当前图形模式下的最大y坐标,即最大纵向坐标。
用法: 函数调用方式为int getmaxy(void);
说明: 此函数独立于图形视口设置,仅取决于显示卡的显示模式相应的分辨率。
这个函数对应的头文件为graphics.h
返回值: 返回当前显示模式的最大y坐标值。
#include<graphics.h>
void main()
{
int driver,mode;
driver=DETECT;
mode=0;
initgraph(&driver,&mode,"");
printf("max x,y: %d %d",getmaxx(),getmaxy());
getch();
restorecrtmode();
}
52. getx() 返回x坐标函数
功能: 函数getx()返回当前图形模式下当前位置的x坐标(水平像素坐标)。
用法: 此函数调用方式为int getx(void);
说明: 这里坐标是相对于当前图形视口的,如果没有设置图形视口,那么缺省的图形视口为整个屏幕。这类似于文本模式下使用wherex()函数。
getx()函数相应的头文件是graphics.h
返回值:返回当前x坐标值。
例: 见53.gety()函数中的例子。
53. gety() 返回y坐标函数
功能: 函数gety()返回图菜模式下当前位置的y坐标(垂直像素坐标)。
用法: 此函数调用方式为int gety(void);
说明: 函数返回的坐标是相对于当前图形视口的,如果没有设置图形视口,那么缺省的图形视口为整个屏幕,这类似于文本模式下使用wherey()函数。
gety()函数对应的头文件是graphics.h
返回值: 返回当前y坐标值。
例: 显示图形模式下当前位置的x,y坐标值:
printf("x: %d, y: %d", getx(),gety());
54. moveto()函数
功能: 函数moveto()将当前位置移动到指定坐标的位置
说明: 这相当于文本模式下gotoxy()函数的操作,它提供对等的功能。
此函数对应的头文件为graphics.h
返回值: 无
例: 把当前位置移到(66,88)位置上:
moveto(66,88);
55. moverel() 相对移动函数
功能: 函数moverel()根据指定的偏移量,将当前位置移动一个相对距离(即偏移量大小的距离),成为新的当前位置。
用法: 此函数调用方式为void moverel(int dx,int dy);
说明: 参数dx为x方向相对移动距离dy为y方向相对移动距离。相对移动对图形应用程序,往往要比绝对移动方便一些。
这个函数对应的头文件是graphics.h
返回值: 无
例: 下面的程序,当语句执行到当前位置在(90,90),则执行后将移动到(100,120)的位置上。即x方向相对移动10,y方向相对移动30:
moverel(10,30);