EasyX指导手册.docx
- 文档编号:24205804
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:79
- 大小:41.31KB
EasyX指导手册.docx
《EasyX指导手册.docx》由会员分享,可在线阅读,更多相关《EasyX指导手册.docx(79页珍藏版)》请在冰豆网上搜索。
EasyX指导手册
EasyX指导手册
制作人:
jianxiawzx
一、基本概念
1.1颜色
EasyX使用24bit真彩色,不再支持调色板模式。
表示颜色有以下几种办法:
1.用预定义颜色常量,如下:
常量
值
颜色
常量
值
颜色
BLACK
0
黑
DARKGRAY
0x545454
深灰
BLUE
0xA80000
蓝
LIGHTBLUE
0xFC5454
亮蓝
GREEN
0x00A800
绿
LIGHTGREEN
0x54FC54
亮绿
CYAN
0xA8A800
青
LIGHTCYAN
0xFCFC54
亮青
RED
0x0000A8
红
LIGHTRED
0x5454FC
亮红
MAGENTA
0xA800A8
紫
LIGHTMAGENTA
0xFC54FC
亮紫
BROWN
0x0054A8
棕
YELLOW
0x54FCFC
黄
LIGHTGRAY
0xA8A8A8
浅灰
WHITE
0xFCFCFC
白
2.用16进制的颜色表示,形式为:
0xbbggrr(bb=蓝,gg=绿,rr=红)
3.用RGB宏合成颜色。
详见RGB。
4.用HSLtoRGB、HSVtoRGB转换其他色彩模型到RGB颜色。
详见HSLtoRGB、HSVtoRGB。
示例:
以下是部分设置前景色的方法:
setcolor(0xff0000);
setcolor(BLUE);
setcolor(RGB(0,0,255));
setcolor(HSLtoRGB(240,1,0.5));
1.2坐标
在EasyX中,坐标分两种:
逻辑坐标和物理坐标。
逻辑坐标
逻辑坐标是在程序中用于绘图的坐标体系。
坐标默认的原点在屏幕的左上角,X轴向右为正,Y轴向下为正,度量单位是象素。
坐标原点可以通过setorigin()函数修改;
坐标轴方向可以通过setaspectratio()函数修改;
缩放比例可以通过setaspectratio()函数修改。
在本手册中,凡是没有注明的坐标,均指逻辑坐标。
物理坐标
物理坐标是描述设备的坐标体系。
坐标原点在屏幕的左上角,X轴向右为正,Y轴向下为正,度量单位是象素。
坐标原点、坐标轴方向、缩放比例都不能改变。
1.3设备
所谓“设备”,简单来说,就是绘图表面。
在EasyX中,设备分两种,一种是默认的绘图窗口,另一种是IMAGE对象。
通过SetWorkingImage()函数可以设置当前用于绘图的设备。
设置当前用于绘图的设备后,所有的绘图函数都会绘制在该设备上。
二、绘图函
2.1.1clearcliprgn
这个函数用于清空裁剪区的屏幕内容。
voidclearcliprgn();
2.1.2cleardevice
这个函数用于清除屏幕内容。
具体的,是用当前背景色清空屏幕,并将当前点移至(0,0)。
voidcleardevice();
2.1.3closegraph
这个函数用于关闭图形环境。
voidclosegraph();
2.1.4getaspectratio
这个函数用于获取当前缩放因子。
voidgetaspectratio(float*pxasp,float*pyasp);
参数:
pxasp返回x方向上的缩放因子。
pyasp返回y方向上的缩放因子。
2.1.5GetHWnd
这个函数用于获取绘图窗口句柄。
HWNDGetHWnd();
在Windows下,句柄是一个窗口的标识,得到句柄后,可以使用WindowsSDK中的各种命令实现对窗口的控制。
示例:
//获得窗口句柄
HWNDhWnd=GetHWnd();
//使用API函数修改窗口名称
SetWindowText(hWnd,"Hello!
");
2.1.6graphdefaults
这个函数用于重置视图、当前点、绘图色、背景色、线形、填充类型、字体为默认值。
voidgraphdefaults();
2.1.7initgraph
这个函数用于初始化绘图环境。
HWNDinitgraph(intWidth,intHeight,intFlag=NULL);
参数:
Width绘图环境的宽度。
Height绘图环境的高度。
Style绘图环境的样式,默认为NULL。
可为以下值:
值
含义
SHOWCONSOLE
表示可以保留原控制台窗口。
2.1.8setaspectratio
这个函数用于设置当前缩放因子。
voidsetaspectratio(floatxasp,floatyasp);
参数:
Xaspx方向上的缩放因子。
例如绘制宽度为100的矩形,实际的绘制宽度为100*xasp。
Yaspy方向上的缩放因子。
例如绘制高度为100的矩形,实际的绘制高度为100*yasp。
说明:
如果缩放因子为负,可以实现坐标轴的翻转。
例如,执行setaspectratio(1,-1);后,可使y轴向上为正。
2.1.9setcliprgn
这个函数用于设置当前绘图设备的裁剪区。
voidsetcliprgn(HRGNhrgn);
参数:
hrgn区域的句柄。
创建区域所使用的坐标为物理坐标。
如果该值为NULL,表示取消之前设置的裁剪区。
说明:
HRGN是Windows定义的表示区域的句柄。
将该区域设置为裁剪区后,任何区域外的绘图都将无效(但仍然可以通过操作显存在裁剪区外绘图)。
可以使用WindowsGDI函数创建一个区域。
例如,创建矩形区域可以使用函数:
HRGNCreateRectRgn(intleft,inttop,intright,intbottom);
此外,还可以使用函数CreateEllipticRgn创建椭圆形的区域,使用CreatePolygonRgn创建多边形的区域等等。
还可以使用CombineRgn组合区域。
更多关于区域的GDI函数,请参考MSDN中的RegionFunctions。
注意:
创建区域后,如果不再使用,请执行DeleteObject(HRGNhrgn)以释放该区域对应的系统资源。
示例:
以下代码用于创建一个矩形裁剪区,并在该裁剪区内画圆,请观察裁剪效果:
#include
#include
voidmain()
{
//初始化绘图窗口
initgraph(640,480);
//创建一个矩形区域
HRGNrgn=CreateRectRgn(100,100,200,200);
//将该矩形区域设置为裁剪区
setcliprgn(rgn);
//不再使用rgn,清理rgn占用的系统资源
DeleteObject(rgn);
//画圆,受裁剪区影响,只显示出四段圆弧
circle(150,150,55);
//取消之前设置的裁剪区
setcliprgn(NULL);
//画圆,不再受裁剪区影响,显示出一个完整的圆
circle(150,150,60);
//按任意键退出
getch();
closegraph();
}
2.1.10setorigin
这个函数用于设置坐标原点。
voidsetorigin(intx,inty);
x原点的x坐标(使用物理坐标)。
y原点的y坐标(使用物理坐标)。
2.2颜色表示及相关函数
2.2.1相关函数和数据如下:
函数或数据
描述
getbkcolor
获取当前绘图背景色。
getcolor
获取当前绘图前景色
GetBValue
返回指定颜色中的蓝色值。
GetGValue
返回指定颜色中的绿色值。
GetRValue
返回指定颜色中的红色值。
HSLtoRGB
转换HSL颜色为RGB颜色。
HSVtoRGB
转换HSV颜色为RGB颜色。
RGB
通过红、绿、蓝颜色分量合成颜色。
RGBtoGRAY
转换RGB颜色为灰度颜色。
RGBtoHSL
转换RGB颜色为HSL颜色。
RGBtoHSV
转换RGB颜色为HSV颜色。
setbkcolor
设置当前绘图背景色。
setcolor
设置当前绘图前景色。
BGR
交换颜色中的红色和蓝色。
2.2.2BGR
BGR宏用于交换颜色中的红色和蓝色。
COLORREFBGR(COLORREFcolor);
参数:
color需要交换红色和蓝色的颜色。
返回值:
返回交换红色和蓝色后的颜色。
说明:
颜色在内存中的表示形式为:
0xbbggrr(bb=蓝,gg=绿,rr=红),但是显存中的颜色表现形式为0xrrggbb。
注意,两者的红色和蓝色是相反的。
直接操作显存时,可以通过BGR宏交换颜色的红色和蓝色部分。
2.2.3getbkcolor
这个函数用于获取当前绘图背景色。
COLORREFgetbkcolor();
2.2.4GetBValue
GetBValue宏用于返回指定颜色中的蓝色值。
BYTEGetBValue(COLORREFrgb);
参数:
rgb指定的颜色。
返回值:
指定颜色中的蓝色值,值的范围0~255。
说明:
GetBValue宏在WindowsSDK中定义。
2.2.5getcolor
这个函数用于获取当前绘图前景色
COLORREFgetcolor();
2.2.6GetGValue
GetGValue宏用于返回指定颜色中的绿色值。
BYTEGetGValue(COLORREFrgb);
参数:
rgb指定的颜色。
返回值:
指定颜色中的绿色值,值的范围0~255。
说明:
GetGValue宏在WindowsSDK中定义。
2.2.7GetRValue
GetRValue宏用于返回指定颜色中的红色值。
BYTEGetRValue(COLORREFrgb);
参数:
rgb指定的颜色。
返回值:
指定颜色中的红色值,值的范围0~255。
说明:
GetRValue宏在WindowsSDK中定义。
2.2.8HSLtoRGB
该函数用于转换HSL颜色为RGB颜色。
COLORREFHSLtoRGB(floatH,floatS,floatL);
参数:
H原HSL颜色模型的Hue(色相)分量,0<=H<360。
S原HSL颜色模型的Saturation(饱和度)分量,0<=S<=1。
L原HSL颜色模型的Lightness(亮度)分量,0<=L<=1。
返回值:
对应的RGB颜色。
说明:
HSL又称HLS。
HSL的颜色模型如图所示:
H是英文Hue的首字母,表示色相,即组成可见光谱的单色。
红色在0度,绿色在120度,蓝色在240度,以此方向过渡。
S是英文Saturation的首字母,表示饱和度,等于0时为灰色。
在最大饱和度1时,具有最纯的色光。
L是英文Lightness的首字母,表示亮度,等于0时为黑色,等于0.5时是色彩最鲜明的状态,等于1时为白色。
示例:
请参见示例程序中的“彩虹”。
2.2.9HSVtoRGB
该函数用于转换HSV颜色为RGB颜色。
COLORREFHSVtoRGB(floatH,floatS,floatV);
参数:
H原HSV颜色模型的Hue(色相)分量,0<=H<360。
S原HSV颜色模型的Saturation(饱和度)分量,0<=S<=1。
V原HSV颜色模型的Value(明度)分量,0<=V<=1。
返回值:
对应的RGB颜色。
说明:
HSV又称HSB。
HSV的颜色模型如图所示:
H是英文Hue的首字母,表示色相,即组成可见光谱的单色。
红色在0度,绿色在120度,蓝色在240度,以此方向过渡。
S是英文Saturation的首字母,表示饱和度,等于0时为灰色。
在最大饱和度1时,每一色相具有最纯的色光。
V是英文Value的首字母,表示明度,等于0时为黑色,在最大明度1时,是色彩最鲜明的状态。
示例:
HSV颜色模型类似于HSL,示例程序中的“彩虹”是HSL模型的操作范例,可以参考。
2.2.10RGB
RGB宏用于通过红、绿、蓝颜色分量合成颜色。
COLORREFRGB(
BYTEbyRed,//颜色的红色部分
BYTEbyGreen,//颜色的绿色部分
BYTEbyBlue//颜色的蓝色部分
);
参数:
byRed颜色的红色部分,取值范围:
0~255。
byGreen颜色的绿色部分,取值范围:
0~255。
byBlue颜色的蓝色部分,取值范围:
0~255。
返回值:
返回合成的颜色。
说明:
可以通过GetRValue、GetGValue、GetBValue宏从颜色中分离出红、绿、蓝颜色分量。
注:
RGB宏在WindowsSDK中定义。
2.2.11RGBtoGRAY
该函数用于返回与指定颜色对应的灰度值颜色。
COLORREFRGBtoGRAY(COLORREFrgb);
参数:
rgb原RGB颜色。
2.2.12RGBtoHSL
该函数用于转换RGB颜色为HSL颜色。
voidRGBtoHSL(COLORREFrgb,float*H,float*S,float*L);
参数:
rgb原RGB颜色。
H用于返回HSL颜色模型的Hue(色相)分量,0<=H<360。
S用于返回HSL颜色模型的Saturation(饱和度)分量,0<=S<=1。
L用于返回HSL颜色模型的Lightness(亮度)分量,0<=L<=1。
说明:
HSL详见HSLtoRGB。
2.2.13RGBtoHSV
该函数用于转换RGB颜色为HSV颜色。
voidRGBtoHSV(COLORREFrgb,float*H,float*S,float*V);
参数:
rgb原RGB颜色。
H用于返回HSV颜色模型的Hue(色相)分量,0<=H<360。
S用于返回HSV颜色模型的Saturation(饱和度)分量,0<=S<=1。
V用于返回HSV颜色模型的Value(明度)分量,0<=V<=1。
2.2.14setbkcolor
这个函数用于设置当前绘图背景色。
voidsetbkcolor(COLORREFcolor);
参数:
color指定要设置的背景颜色。
说明:
“背景色”是调色板绘图模式下的概念,所谓的背景色,是调色板中编号为0的颜色,可以通过修改编号0的颜色达到随时修改背景色的目的。
在调色板模式下,显存中保存的是每种颜色在调色板中的编号。
在EasyX中,已经废弃了调色板模式。
真彩色绘图模式下没有调色板,显存中直接保存每个点的颜色,没有背景色的概念。
EasyX采用真彩色绘图模式,同时使用背景色,目的有两个:
1.当文字背景不是透明时,指定文字的背景色。
2.执行cleardevice()或clearcliprgn()时,使用该颜色清空屏幕或裁剪区。
示例:
以下示例实现在蓝色背景下绘制红色的矩形:
#include
#include
voidmain()
{
//初始化绘图窗口
initgraph(640,480);
//设置背景色为蓝色
setbkcolor(BLUE);
//用背景色清空屏幕
cleardevice();
//设置绘图色为红色
setcolor(RED);
//画矩形
rectangle(100,100,300,300);
//按任意键退出
getch();
closegraph();
}
2.2.15setcolor
这个函数用于设置当前绘图前景色。
voidsetcolor(COLORREFcolor);
参数:
color要设置的前景颜色。
2.3绘制图形相关函数
2
2.3.2arc
这个函数用于画椭圆弧。
voidarc(intleft,inttop,intright,intbottom,doublestangle,doubleendangle);
参数:
left圆弧所在椭圆的外切矩形的左上角x坐标。
top圆弧所在椭圆的外切矩形的左上角y坐标。
right圆弧所在椭圆的外切矩形的右下角x坐标。
bottom圆弧所在椭圆的外切矩形的右下角y坐标。
stangle圆弧的起始角的弧度。
endangle圆弧的终止角的弧度。
2.3.3bar
这个函数用于画无边框填充矩形。
voidbar(intleft,inttop,intright,intbottom);
参数:
left矩形左部x坐标。
top矩形上部y坐标。
right矩形右部x坐标。
bottom矩形下部y坐标。
2.3.4bar3d
这个函数用于画有边框三维填充矩形。
voidbar3d(intleft,inttop,intright,intbottom,intdepth,booltopflag);
参数:
left矩形左部x坐标。
top矩形上部y坐标。
right矩形右部x坐标。
bottom矩形下部y坐标。
depth矩形深度。
topflag为false时,将不画矩形的三维顶部。
该选项可用来画堆叠的三维矩形。
2.3.5circle
这个函数用于画圆。
voidcircle(intx,inty,intradius);
参数:
x圆的圆心x坐标。
y圆的圆心y坐标。
radius圆的半径。
2.3.6drawpoly
这个函数用于画多边形。
voiddrawpoly(intnumpoints,constint*polypoints);
参数:
numpoints多边形点的个数。
polypoints每个点的坐标,数组元素个数为numpoints*2。
该函数并不会自动连接多边形首尾。
如果需要画封闭的多边形,请将最后一个点设置为与第一点相同。
以下局部代码绘制一个封闭的三角形:
intpoints[]={50,200,200,200,200,50,50,200};
drawpoly(4,points);
2.3.7ellipse
这个函数用于画椭圆。
voidellipse(intleft,inttop,intright,intbottom);
参数:
left椭圆外切矩形的左上角x坐标。
top椭圆外切矩形的左上角y坐标。
right椭圆外切矩形的右下角x坐标。
bottom椭圆外切矩形的右下角y坐标。
说明:
由于屏幕像素点坐标是整数,因此用圆心和半径描述的椭圆无法处理直径为偶数的情况。
而该函数的参数采用外切矩形来描述椭圆,可以解决这个问题。
当外切矩形为正方形时,可以绘制圆。
2.3.8fillcircle
这个函数用于画填充圆。
voidfillcircle(intx,inty,intradius);
参数:
x圆心的x坐标。
y圆心的y坐标。
radius圆的半径。
说明:
该函数使用当前线形和当前填充样式绘制有外框的填充圆。
2.3.9fillellipse
这个函数用于画填充的椭圆。
voidfillellipse(intleft,inttop,intright,intbottom);
参数:
left椭圆外切矩形的左上角x坐标。
top椭圆外切矩形的左上角y坐标。
right椭圆外切矩形的右下角x坐标。
bottom椭圆外切矩形的右下角y坐标。
说明:
该函数使用当前线形和当前填充样式绘制有外框的填充椭圆。
由于屏幕像素点坐标是整数,因此用圆心和半径描述的椭圆无法处理直径为偶数的情况。
而该函数的参数采用外切矩形来描述椭圆,可以解决这个问题。
当外切矩形为正方形时,可以绘制填充圆。
2.3.10fillpoly
这个函数用于画填充的多边形。
voidfillpoly(intnumpoints,constint*polypoints);
参数:
numpoints多边形点的个数。
polypoints每个点的坐标,数组元素个数为numpoints*2。
该函数会自动连接多边形首尾。
说明:
该函数使用当前线形和当前填充样式绘制有外框的填充多边形。
示例:
以下局部代码绘制一个封闭的填充三角形:
intpoints[]={50,200,200,200,200,50};
fillpoly(3,points);
2.3.11floodfill
这个函数用于填充区域。
voidfloodfill(intx,inty,COLORREFborder)
参数:
x待填充区域内任意点的x坐标。
y待填充区域内任意点的y坐标。
border待填充区域的边界颜色。
填充动作在该颜色围成的封闭区域内填充。
说明:
填充动作以(x,y)为起点,向周围扩散,直到遇到border指定的颜色才会终止。
所以,指定的区域必须是封闭的。
填充的颜色和样式可以使用setfillstyle函数指定。
2.3.12getfillstyle
这个函数用于获取当前填充类型。
voidgetfillstyle(COLORREF*pcolor,int*ppattern=NULL,char*pupattern=NULL);
参数:
pcolor返回当前填充色。
ppattern返回当前填充图案。
详见setfillstyle。
pupattern指向char[8]的指针,如果该指针不为空,且当前填充图案为USER_FILL,返回当前的自定义填充样式。
2.3.13getheight
这个函数用于获取绘图区高度。
intgetheight();
2.3.14getlinestyle
这个函数用于获取当前线形。
voidgetlinestyle(int*plinestyle,WORD*pupattern=NULL,int*pthickness=NULL);
参数:
plinestyle返回当前线型。
详见setlinestyle。
pupattern返回当前自定义线形数据。
pthickness返回当前线形宽度。
2.3.15getpixel
这个函数用于获取点的颜色。
COLORREFgetpixel(intx,inty);
参数:
x要获取颜色的x坐标。
y要获取颜色的y坐标。
2.3.16getwidth
该函数用于获取绘图区宽度。
intgetwidth();
2.3.17getx
这个函数用于获取当前x坐标。
intgetx();
2.3.18gety
这个函数用于获取当前y坐标。
intgety();
2.3.19line
这个函数用于画线。
还可以用linerel和lineto画线。
voidline(intx1,inty1,intx2,inty2);
参数:
x1线的起始点的x坐标。
y1线的起始点的y坐标。
x2线的终止点的x坐标。
y2线的终止点的y坐标。
2.3.20linerel
这个函数用于画线。
还可以用line和lineto画线。
voidlinerel(intdx,intdy);
参数:
dx从“当前点”开始画线,沿x轴偏移dx。
dy从“当前点”开始画线,沿y轴偏移dy。
2.3.21lineto
这个函数用于画线。
还可以用line和lin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EasyX 指导 手册