系列文章
①:安装及基本概念
②:EasyX函数-设备相关
③:EasyX函数-颜色模型
④:EasyX函数-图形样式
⑤:EasyX函数-绘图相关〔1〕
⑥:EasyX函数-绘图相关〔2〕
文章目录
前言
作者也是个小白,本【教程】充其量算个学习笔记,若有写的不正确的地方还请指教。
五、图像对象 - IMAGE
- 类定义:
class IMAGE(int _width = 0, int _height = 0); - 类原型:
//IMAGE在easyx.h中的定义 class IMAGE { public: int getwidth() const; // 获取对象的宽度 int getheight() const; // 获取对象的高度 private: ... public: IMAGE(int _width = 0, int _height = 0); // 创建图像 IMAGE(const IMAGE &img); // 拷贝构造函数 IMAGE& operator = (const IMAGE &img); // 赋值运算符重载函数 virtual ~IMAGE(); virtual void Resize(int _width, int _height); // 调整尺寸 }; - 公有成员:
- i n t g e t w i d t h ( ) ; int\space getwidth(); int getwidth(); - 获取 IMAGE 对象的宽度,以像素为单位:
public : int IMAGE::getwidth() const- i n t g e t h e i g h t ( ) ; int\space getheight(); int getheight(); - 获取 IMAGE 对象的高度,以像素为单位:
public : int IMAGE::getheight() const- o p e r a t o r = operator= operator= :重载运算符=,实现IMAGE赋值。该操作仅拷贝源图像的内容,不拷贝源图像的绘图窗口:
public : IMAGE & IMAGE::operator=(const IMAGE img)
六、填充样式对象 - FILLSTYLE
-
类定义:
class FILLSTYLE(); -
类原型:
//FILLSTYLE在easyx.h中的定义 class FILLSTYLE { public: FILLSTYLE(); FILLSTYLE(const FILLSTYLE &style); FILLSTYLE& operator = (const FILLSTYLE &style); // 赋值运算符重载函数 virtual ~FILLSTYLE(); int style; // 填充形式 long hatch; // 填充图案样式 IMAGE* ppattern; // 填充图像 }; -
公有成员:
ints t y l e style style - 填充形式。longh a t c h hatch hatch - 填充图案样式。仅当 s t y l e style style=BS_HATCHED时有效。IMAGE*p p a t t e r n ppattern ppattern - 填充图像或图案。仅当 s t y l e style style=BS_PATTERN或BS_DIBPATTERN时有效。
-
说明:
s t y l e style style可以是以下宏(值):宏 值 含义 BS_SOLID 0 固实填充。 BS_NULL 1 不填充。 BS_HATCHED 2 图案填充(见 h a t c h hatch hatch)。 BS_PATTERN 3 自定义图案填充(见 p p a t t e r n ppattern ppattern)。 BS_DIBPATTERN 5 自定义图像填充(见 p p a t t e r n ppattern ppattern)。 h a t c h hatch hatch可以是以下宏(值):
宏 值 含义 HS_HORIZONTAL 0 
HS_VERTICAL 1 
HS_FDIAGONAL 2 
HS_BDIAGONAL 3 
HS_CROSS 4 
HS_DIAGCROSS 5 
p p a t t e r n ppattern ppattern:
- 当
s
t
y
l
e
style
style=
BS_PATTERN时, p p a t t e r n ppattern ppattern指向的IMAGE为填充图案,其中BLACK对于背景,非BLACK对于图案。 - 当
s
t
y
l
e
style
style=
BS_DIBPATTERN时, p p a t t e r n ppattern ppattern指向的IMAGE为填充图像,以其为填充单元填充。
使用方法见下 setfillstyle()。
- 当
s
t
y
l
e
style
style=
七、画线样式对象 - LINESTYLE
-
类定义:
class LINESTYLE(); -
类原型:
//LINESTYLE在easyx.h中的定义 class LINESTYLE { public: LINESTYLE(); LINESTYLE(const LINESTYLE &style); LINESTYLE& operator = (const LINESTYLE &style); // 赋值运算符重载函数 virtual ~LINESTYLE(); DWORD style; DWORD thickness; DWORD *puserstyle; DWORD userstylecount; }; -
公有成员:
DWORDs t y l e \space style style - 画线样式。DWORDt h i c k n e s s \space thickness thickness - 线宽,以像素为单位。DWORD*p u s e r s t y l e puserstyle puserstyle - 自定义样式数组,仅当 s t y l e style style为PS_USERSTYLE时有效。DWORDu s e r s t y l e c o u n t userstylecount userstylecount - 自定义数组个数,仅当 s t y l e style style=PS_USERSTYLE时有效。
-
说明:
s t y l e style style,指定了画线样式,该样式由 **直线样式** 、 **端点样式** 、**连接样式** 三类组成。可以是其中一类或多类的组合。同一类型中只能指定一个样式。
直线样式 可为:
值 含义 PS_SOLID 线形为实线:— PS_DASH 线形为:------------ PS_DOT 线形为:············ PS_DASHDOT 线形为:-·-·-·-·-·-· PS_DASHDOTDOT 线形为:-··-··-··-·· PS_NULL 线形为不可见。 PS_USERSTYLE 线形样式为用户自定义,见 p u s e r s t y l e puserstyle puserstyle参数 宏 PS_STYLE_MASK 是直线样式的掩码,可以通过该宏从画线样式中分离出直线样式。
_端点样式_可为:值 含义 PS_ENDCAP_ROUND 端点为圆形。 PS_ENDCAP_SQUARE 端点为方形。 PS_ENDCAP_FLAT 端点为平坦。 宏 PS_ENDCAP_MASK 是端点样式的掩码,可以通过该宏从画线样式中分离出端点样式。
_连接样式_可为:值 含义 PS_JOIN_BEVEL 连接处为斜面。 PS_JOIN_MITER 连接处为斜接。 PS_JOIN_ROUND 连接处为圆弧。 宏 PS_JOIN_MASK 是连接样式的掩码,可以通过该宏从画线样式中分离出连接样式。
掩码宏表示对应样式组所占用的所有位。例如,对于一个已经混合了多种样式的 style 变量,如果想仅从其中将直线样式改为点划线,只需:style = (style & ~PS_STYLE_MASK) | PS_DASHDOT; /* 先将原style与上直线样式的掩码的反(~PS_STYLE_MASK), * 在或上点划线样式(PS_DASHDOT) * /∗ p u s e r s t y l e *\space puserstyle ∗ puserstyle ,指向数组,数组长度为 u s e r s t y l e c o u n t userstylecount userstylecount且表示方法如下:
puserstyle[]={/*画线长度*/,/*空白长度*/,/*画线长度*/,/*空白长度*/,...};
-
实例:
DWORD a[5]={5,4,1,9,7}; LINESTYLE s; s.style=PS_USERSTYLE; s.thickness=1; s.puserstyle=a; s.userstylecount=5; setlinestyle(s);//总之就是设置样式 /* 这段代码会是线段样式为: * 粗细为1, * 画5(像素)留空 4 ,再画 1 空 9 ,再画 7 ,(重复)画 5 ... * / -
注:DWORD即
unsigned long:typedef unsigned long DWORD;
八、EasyX函数 之 图形样式
-
Ⅰ.背景
-
ⅰ.背景颜色
α.设置背景颜色 - setbkcolor()
作用:设置设备背景色。
函数原型:
void setbkcolor(COLORREF color);参数:
COLORREFc o l o r color color:设置的背景色。(COLORREF见①,EasyX中的颜色,即unsigned long:
typedef unsigned long DWORD; typedef DWORD COLORREF;)
返回值: /
注:setbkcolor()后不会改变背景色,只有在下一次执行绘图指令时才会改变,因此,使用cleardevice()【用背景色清空设备】在设置背景色后。
β.获取背景颜色 - getbkcolor()
作用:获取当前设备背景色。
函数原型:
COLORREF getbkcolor();参数: /
返回值:当前设备背景色。
-
ⅱ.背景模式
α.设置背景模式 - setbkmode()
作用:设置当前设备图案填充和文字输出时的背景模式。
函数原型:
void setbkmode(int mode);参数:
intm o d e mode mode :指定图案填充和文字输出时的背景模式,可以是以下值:值 描述 OPAQUE 背景用当前背景色填充(默认)。即使用特定填充颜色作为所绘物体背景。 TRANSPARENT 背景是透明的。即还是原来背景。
返回值: /
β.获取背景模式 - getbkmode()
作用:获取当前设备图案填充和文字输出时的背景模式。
函数原型:
int getbkmode();参数: /
返回值:
int,如果函数执行成功,返回值表示当前设备背景混合模式,值为OPAQUE或TRANSPARENT。如果函数执行失败,返回值为 0。
-
-
Ⅱ.绘图模式
-
ⅰ.填充颜色
α.设置填充颜色 - setfillcolor()
作用:设置当前设备填充颜色。
函数原型:
void setfillcolor(COLORREF color);参数:
COLORREFc o l o r color color:填充颜色。
返回值: /
实例:设置背景色为蓝色:
setfillcolor(BLUE);β.获取填充颜色 - getfillcolor()
作用:获取当前设备填充颜色。
函数原型:
COLORREF getfillcolor();参数: /
返回值:
COLORREF,当前设备填充颜色。 -
ⅱ.填充样式
α.设置填充样式 - setfillstyle()
作用:设置当前设备填充样式。
函数原型:
void setfillstyle( FILLSTYLE* pstyle );void setfillstyle( int style, long hatch = NULL, IMAGE* ppattern = NULL );void setfillstyle( BYTE* ppattern8x8 );参数:
FILLSTYLE*p s t y l e pstyle pstyle:指向填充样式的指针(见 <六>)- { i n t s t y l e l o n g h a t c h I M A G E ∗ p p a t t e r n \begin{cases} int\space style\\ long\space hatch\\ {\rm{IMAGE*}}\space ppattern \end{cases} ⎩⎪⎨⎪⎧int stylelong hatchIMAGE∗ ppattern相当于将一个pstyle拆开写了,作用一致。
BYTE*p p a t t e r n 8 x 8 ppattern8x8 ppattern8x8:指定自定义填充图案,效果同BS_PATTERN,该重载以BYTE[8]数组定义 8 x 8 区域的填充图案。数组中,每个元素表示一行的样式,BYTE 类型有 8 位,按位从高到低表示从左到右每个点的状态,由此组成 8 x 8 的填充单元,将填充单元平铺实现填充。对应的二进制位为 0 表示背景区域,为 1 表示图案区域。
返回值: /
β.获取填充样式 - getfillstyle()
作用:获取当前设备填充样式。
函数原型:
void getfillstyle( FILLSTYLE* pstyle );参数:
FILLSTYLE*p s t y l e pstyle pstyle:返回填充样式
返回值: /
-
ⅲ.画线颜色
α.设置画线颜色 - setlinecolor()
作用:设置当前设备画线颜色。
函数原型:
void setlinecolor(COLORREF color);参数:
COLORREFc o l o r color color:要设置的画线颜色。
返回值: /
β.获取画线颜色 - getlinecolor()
作用:获取当前设备画线颜色。
函数原型:
COLORREF getlinecolor();参数: /
返回值:
COLORREF,当前设备画线颜色。 -
ⅳ.画线样式
α.设置画线样式 - setlinestyle()
作用:设置当前设备画线样式。
函数原型:
void setlinestyle( const LINESTYLE* pstyle );void setlinestyle( int style, int thickness = 1, const DWORD *puserstyle = NULL, DWORD userstylecount = 0 );参数:
const LINESTYLE*p s t y l e pstyle pstyle:指向画线样式的指针(见<七>)-
{
i
n
t
s
t
y
l
e
i
n
t
t
h
i
c
k
n
e
s
s
c
o
n
s
t
D
W
O
R
D
∗
p
u
s
e
r
s
t
y
l
e
D
W
O
R
D
u
s
e
r
s
t
y
l
e
c
o
u
n
t
\begin{cases} int\space style\\ int\space thickness\\ const\space{\rm{DWORD*}}\space puserstyle\\ {\rm DWORD}\space userstylecount \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧int styleint thicknessconst DWORD∗ puserstyleDWORD userstylecount相当于将
LINESTYLE分开写。(见<七>)
返回值: /
β.获取画线样式 - getlinestyle()
作用:获取当前设备画线样式。
函数原型:
void getlinestyle( LINESTYLE* pstyle );参数:
LINESTYLE*p s t y l e pstyle pstyle:指针,返回当前画线样式。
返回值: /
-
ⅴ.多边形样式
α.设置多边形填充样式 - setpolyfillmode()
作用:设置当前设备多边形填充模式。
函数原型:
void setpolyfillmode(int mode);参数:
intm o d e mode mode:多边形填充样式,可为:
A L T E R N A T E ALTERNATE ALTERNATE 交替填充模式(默认值)。在该模式中,对于每条水平扫描线,从左向右逐像素扫描,当遇到多边形的奇数条边时,开始填充;当遇到偶数条边时,停止填充。例如五角星,五条边多次相交,采用 ALTERNATE 模式填充时,中心的五边形不被填充。
W I N D I N G WINDING WINDING 根据绘图方向填充的模式。在该模式中,对于每条水平扫描线,从左向右逐像素扫描,当遇到多边形的奇数条边时,开始填充;当遇到偶数条边时,需要进一步根据穿过该扫描线的边的方向判断:如果从上向下穿越扫描线的边数和从下向上穿越扫描线的边数不同,则开始填充,边数相同,则停止填充。例如五角星,五条边多次相交,采用 WINDING 模式填充时,中心的五边形会被填充。
返回值: /
注:该设置影响fillpolygon、solidpolygon、clearpolygon三个绘制多边形函数的执行效果。
β.获取多边形样式 - getpolyfillmode()
作用:获取当前设备多边形填充模式。
函数原型:
int getpolyfillmode();参数:/
返回值:
int,如果函数执行成功,返回值表示当前设备多边形填充模式,值为ALTERNATE或WINDING.如果函数执行失败,返回值为0。 -
ⅵ.二元光栅
α.获取二元光栅操作模式 - getrop2()
作用:获取当前设备二元光栅操作模式。
函数原型:
int getrop2();参数:/
返回值:
int,当前设备二元光栅操作码,详见 setrop2 函数。β.设置二元光栅操作模式 - setrop2()
作用:设置当前设备二元光栅操作模式。
函数原型:
void setrop2(int mode);返回值: /
参数:
intm o d e mode mode:二元光栅操作码。该函数支持全部的 16 种二元光栅操作码,如下:1 , 2
值 描述 R2_BLACK 绘制出的像素颜色 = 黑色 R2_COPYPEN 绘制出的像素颜色 = 当前颜色(默认) R2_MASKNOTPEN 绘制出的像素颜色 = 屏幕颜色 & ( ! 当前颜色) R2_MASKPEN 绘制出的像素颜色 = 屏幕颜色 & 当前颜色 R2_MASKPENNOT 绘制出的像素颜色 = ( ! 屏幕颜色) & 当前颜色 R2_MERGENOTPEN 绘制出的像素颜色 = 屏幕颜色 | ( ! 当前颜色) R2_MERGEPEN 绘制出的像素颜色 = 屏幕颜色 | 当前颜色 R2_MERGEPENNOT 绘制出的像素颜色 = ( ! 屏幕颜色) | 当前颜色 R2_NOP 绘制出的像素颜色 = 屏幕颜色 R2_NOT 绘制出的像素颜色 = ! 屏幕颜色 R2_NOTCOPYPEN 绘制出的像素颜色 = ! 当前颜色 R2_NOTMASKPEN 绘制出的像素颜色 = ! (屏幕颜色 & 当前颜色) R2_NOTMERGEPEN 绘制出的像素颜色 = ! (屏幕颜色 | 当前颜色) R2_NOTXORPEN 绘制出的像素颜色 = ! (屏幕颜色 ^ 当前颜色) R2_WHITE 绘制出的像素颜色 = 白色 R2_XORPEN 绘制出的像素颜色 = 屏幕颜色 ^ 当前颜色 -
结语
精力、时间有限,先写到这,下期见!
@HaohaoCppDebuger|寻兰
2021/11/4
THANK YOU !
1万+



被折叠的 条评论
为什么被折叠?



