填充样式对象。
class FILLSTYLE();
公有成员:
int style;
填充形式,详细解释同 setfillstyle 函数重载的 style 参数。
long hatch;
填充图案样式,详细解释同 setfillstyle 函数重载的 hatch 参数。
IMAGE* ppattern;
填充图像,详细解释同 setfillstyle 函数重载的 ppattern 参数。
说明:
参数的详细含义及使用方法请参考 setfillstyle 函数。
示例:
请参考 setfillstyle 函数中的示例。
这个函数用于获取当前绘图背景色。
COLORREF getbkcolor();
参数:
(无)
返回值:
返回当前绘图背景色。
示例:
(无)
这个函数用于获取图案填充和文字输出时的背景模式。
int getbkmode();
参数:
(无)
返回值:
如果函数执行成功,返回值表示当前背景混合模式(OPAQUE 或 TRANSPARENT,详见 setbkmode 函数的参数)。如果函数执行失败,返回值为 0。
示例:
(无)
这个函数用于获取当前的填充颜色。
COLORREF getfillcolor();
参数:
(无)
返回值:
返回当前的填充颜色。
示例:
(无)
请参阅:
setfillcolor getfillstyle setfillstyle
这个函数用于获取当前填充样式。
void getfillstyle( FILLSTYLE* pstyle );
参数:
pstyle
返回当前填充样式。详见 setfillstyle。
返回值:
(无)
示例:
(无)
这个函数用于获取当前画线颜色。
COLORREF getlinecolor();
参数:
(无)
返回值:
返回当前的画线颜色。
示例:
(无)
请参阅:
setlinecolor getlinestyle setlinestyle
这个函数用于获取当前画线样式。
void getlinestyle( LINESTYLE* pstyle );
参数:
pstyle
返回当前画线样式。详见 setlinestyle。
返回值:
(无)
示例:
(无)
这个函数用于获取当前多边形填充模式。
int getpolyfillmode();
参数:
(无)
返回值:
如果函数执行成功,返回值表示当前的多边形填充模式(ALTERNATE 或 WINDING,详见 setpolyfillmode 函数的参数)。如果函数执行失败,返回值为 0。
示例:
(无)
这个函数用于获取前景的二元光栅操作模式。
int getrop2();
参数:
(无)
返回值:
二元光栅操作码,详见 setrop2 函数。
示例:
(无)
画线样式对象。
class LINESTYLE();
公有成员:
DWORD style;
画线样式,详细解释同 setlinestyle 函数重载的 style 参数。
DWORD thickness;
线的宽度,以像素为单位。
DWORD* puserstyle;
用户自定义样式数组,详细解释同 setlinestyle 函数重载的 puserstyle 参数
DWORD userstylecount;
用户自定义样式数组的元素数量。
说明:
参数的详细含义及使用方法请参考 setlinestyle 函数。
示例:
请参考 setlinestyle 函数中的示例。
这个函数用于设置当前绘图背景色。
void setbkcolor(COLORREF color);
参数:
color
指定要设置的背景颜色。
返回值:
(无)
说明:
“背景色”是调色板绘图模式下的概念,所谓的背景色,是调色板中编号为 0 的颜色,可以通过修改编号 0 的颜色达到随时修改背景色的目的。在调色板模式下,显存中保存的是每种颜色在调色板中的编号。在 EasyX 中,已经废弃了调色板模式。
真彩色绘图模式下没有调色板,显存中直接保存每个点的颜色,没有背景色的概念。
EasyX 采用真彩色绘图模式,同时使用背景色,目的有两个:
1. 当文字背景不是透明时,指定文字的背景色。
2. 执行
cleardevice() 或 clearcliprgn() 时,使用该颜色清空屏幕或裁剪区。
示例:
以下示例实现在蓝色背景下绘制红色的矩形:
#include <graphics.h> #include <conio.h> int main() { // 初始化绘图窗口 initgraph(640, 480); // 设置背景色为蓝色 setbkcolor(BLUE); // 用背景色清空屏幕 cleardevice(); // 设置绘图色为红色 setcolor(RED); // 画矩形 rectangle(100, 100, 300, 300); // 按任意键退出 _getch(); closegraph(); }
这个函数用于设置图案填充和文字输出时的背景模式。
void setbkmode(int mode);
参数:
mode
指定图案填充和文字输出时的背景模式,可以是以下值:
OPAQUE | 背景用当前背景色填充(默认)。 |
TRANSPARENT | 背景是透明的。 |
返回值:
(无)
示例:
(无)
这个函数用于设置当前的填充颜色。
void setfillcolor(COLORREF color);
参数:
color
填充颜色。
返回值:
(无)
示例:
设置蓝色填充:
setfillcolor(BLUE);
请参阅:
getfillcolor getfillstyle setfillstyle
这个函数用于设置当前填充样式。
void setfillstyle( FILLSTYLE* pstyle );
void setfillstyle( int style, long hatch = NULL, IMAGE* ppattern = NULL );
void setfillstyle( BYTE* ppattern8x8 );
参数:
pstyle
指向填充样式 FILLSTYLE 的指针。
style
指定填充样式。可以是以下宏或值:
BS_SOLID | 0 | 固实填充。 |
BS_NULL | 1 | 不填充。 |
BS_HATCHED | 2 | 图案填充。 |
BS_PATTERN | 3 | 自定义图案填充。 |
BS_DIBPATTERN | 5 | 自定义图像填充。 |
hatch
指定填充图案,仅当 style 为 BS_HATCHED 时有效。填充图案的颜色由函数 setfillcolor 设置,背景区域使用背景色还是保持透明由函数 setbkmode 设置。hatch 参数可以是以下宏或值:
HS_HORIZONTAL | 0 | |
HS_VERTICAL | 1 | |
HS_FDIAGONAL | 2 | |
HS_BDIAGONAL | 3 | |
HS_CROSS | 4 | |
HS_DIAGCROSS | 5 |
ppattern
指定自定义填充图案或图像,仅当 style 为 BS_PATTERN 或 BS_DIBPATTERN 时有效。
当 style 为 BS_PATTERN 时,ppattern 指向的 IMAGE 对象表示自定义填充图案,IMAGE 中的黑色(BLACK)对应背景区域,非黑色对应图案区域。图案区域的颜色由函数 settextcolor 设置。
当 style 为 BS_DIBPATTERN 时,ppattern 指向的 IMAGE 对象表示自定义填充图像,以该图像为填充单元实施填充。
ppattern8x8
指定自定义填充图案,效果同 BS_PATTERN,该重载以 BYTE[8] 数组定义 8 x 8 区域的填充图案。数组中,每个元素表示一行的样式,BYTE 类型有 8 位,按位从高到低表示从左到右每个点的状态,由此组成 8 x 8 的填充单元,将填充单元平铺实现填充。对应的二进制位为 0 表示背景区域,为 1 表示图案区域。
返回值:
(无)
示例:
以下局部代码设置固实填充:
setfillstyle(BS_SOLID);
以下局部代码设置填充图案为斜线填充:
setfillstyle(BS_HATCHED, HS_BDIAGONAL);
以下局部代码设置自定义图像填充(由 res\\bk.jpg 指定填充图像):
IMAGE img; loadimage(&img, _T("res\\bk.jpg")); setfillstyle(BS_DIBPATTERN, NULL, &img);
以下完整代码设置自定义的填充图案(小矩形填充),并使用该图案填充一个三角形:
#include <conio.h> #include <graphics.h> int main() { // 创建绘图窗口 initgraph(640, 480); // 定义填充单元 IMAGE img(10, 8); // 绘制填充单元 SetWorkingImage(&img); // 设置绘图目标为 img 对象 setbkcolor(BLACK); // 黑色区域为背景色 cleardevice(); setfillcolor(WHITE); // 白色区域为自定义图案 solidrectangle(1, 1, 8, 5); SetWorkingImage(NULL); // 恢复绘图目标为默认绘图窗口 // 设置填充样式为自定义填充图案 setfillstyle(BS_PATTERN, NULL, &img); // 设置自定义图案的填充颜色 settextcolor(GREEN); // 绘制无边框填充三角形 POINT pts[] = { {50, 50}, {50, 200}, {300, 50} }; solidpolygon(pts, 3); // 按任意键退出 _getch(); closegraph(); }
以下局部代码设置自定义的填充图案(圆形图案填充):
setfillstyle((BYTE*)"\x3e\x41\x80\x80\x80\x80\x80\x41");
以下局部代码设置自定义的填充图案(细斜线夹粗斜线图案填充):
setfillstyle((BYTE*)"\x5a\x2d\x96\x4b\xa5\xd2\x69\xb4");
这个函数用于设置当前画线颜色。
void setlinecolor(COLORREF color);
参数:
color
要设置的画线颜色。
返回值:
(无)
示例:
(无)
请参阅:
getlinecolor getlinestyle setlinestyle
这个函数用于设置当前画线样式。
void setlinestyle( const LINESTYLE* pstyle );
void setlinestyle( int style, int thickness = 1, const DWORD *puserstyle = NULL, DWORD userstylecount = 0 );
参数:
pstyle
指向画线样式 LINESTYLE 的指针。
style
画线样式,由直线样式、端点样式、连接样式三类组成。可以是其中一类或多类的组合。同一类型中只能指定一个样式。
直线样式可以是以下值:
PS_SOLID | 线形为实线。 |
PS_DASH | 线形为:------------ |
PS_DOT | 线形为:············ |
PS_DASHDOT | 线形为:-·-·-·-·-·-· |
PS_DASHDOTDOT | 线形为:-··-··-··-·· |
PS_NULL | 线形为不可见。 |
PS_USERSTYLE | 线形样式为用户自定义,由参数 puserstyle 和 userstylecount 指定。 |
宏 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 是连接样式的掩码,可以通过该宏从画线样式中分离出连接样式。
thickness
线的宽度,以像素为单位。
puserstyle
用户自定义样式数组,仅当线型为 PS_USERSTYLE 时该参数有效。
数组第一个元素指定画线的长度,第二个元素指定空白的长度,第三个元素指定画线的长度,第四个元素指定空白的长度,以此类推。
userstylecount
用户自定义样式数组的元素数量。
返回值:
(无)
说明:
掩码宏表示对应样式组所占用的所有位。例如,对于一个已经混合了多种样式的 style 变量,如果希望仅将直线样式修改为点划线,可以这么做:
style = (style & ~PS_STYLE_MASK) | PS_DASHDOT;
示例:
以下局部代码设置画线样式为点划线:
setlinestyle(PS_DASHDOT);
以下局部代码设置画线样式为宽度 3 像素的虚线,端点为平坦的:
setlinestyle(PS_DASH | PS_ENDCAP_FLAT, 3);
以下局部代码设置画线样式为宽度 10 像素的实线,连接处为斜面:
setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 10);
以下局部代码设置画线样式为自定义样式(画 5 个像素,跳过 2 个像素,画 3 个像素,跳过 1 个像素……),端点为平坦的:
DWORD a[4] = {5, 2, 3, 1}; setlinestyle(PS_USERSTYLE | PS_ENDCAP_FLAT, 1, a, 4);
这个函数用于设置当前多边形填充模式。
void setpolyfillmode(int mode);
参数:
mode
指定多边形填充模式,可以是以下值:
ALTERNATE | 交替填充模式(默认值)。 在该模式中,对于每条水平扫描线,从左向右逐像素扫描,当遇到多边形的奇数条边时,开始填充;当遇到偶数条边时,停止填充。 例如五角星,五条边多次相交,采用 ALTERNATE 模式填充时,中心的五边形不被填充。 |
WINDING | 根据绘图方向填充的模式。 在该模式中,对于每条水平扫描线,从左向右逐像素扫描,当遇到多边形的奇数条边时,开始填充;当遇到偶数条边时,需要进一步根据穿过该扫描线的边的方向判断:如果从上向下穿越扫描线的边数和从下向上穿越扫描线的边数不同,则开始填充,边数相同,则停止填充。 例如五角星,五条边多次相交,采用 WINDING 模式填充时,中心的五边形会被填充。 |
返回值:
(无)
说明:
该设置影响 fillpolygon、solidpolygon、clearpolygon 三个绘制多边形函数的执行效果。
示例:
请参见 solidpolygon 函数的示例。
这个函数用于设置前景的二元光栅操作模式。
void setrop2(int mode);
参数:
mode
二元光栅操作码。该函数支持全部的 16 种二元光栅操作码,罗列如下:
R2_BLACK | 绘制出的像素颜色 = 黑色 |
R2_COPYPEN | 绘制出的像素颜色 = 当前颜色(默认) |
R2_MASKNOTPEN | 绘制出的像素颜色 = 屏幕颜色 AND (NOT 当前颜色) |
R2_MASKPEN | 绘制出的像素颜色 = 屏幕颜色 AND 当前颜色 |
R2_MASKPENNOT | 绘制出的像素颜色 = (NOT 屏幕颜色) AND 当前颜色 |
R2_MERGENOTPEN | 绘制出的像素颜色 = 屏幕颜色 OR (NOT 当前颜色) |
R2_MERGEPEN | 绘制出的像素颜色 = 屏幕颜色 OR 当前颜色 |
R2_MERGEPENNOT | 绘制出的像素颜色 = (NOT 屏幕颜色) OR 当前颜色 |
R2_NOP | 绘制出的像素颜色 = 屏幕颜色 |
R2_NOT | 绘制出的像素颜色 = NOT 屏幕颜色 |
R2_NOTCOPYPEN | 绘制出的像素颜色 = NOT 当前颜色 |
R2_NOTMASKPEN | 绘制出的像素颜色 = NOT (屏幕颜色 AND 当前颜色) |
R2_NOTMERGEPEN | 绘制出的像素颜色 = NOT (屏幕颜色 OR 当前颜色) |
R2_NOTXORPEN | 绘制出的像素颜色 = NOT (屏幕颜色 XOR 当前颜色) |
R2_WHITE | 绘制出的像素颜色 = 白色 |
R2_XORPEN | 绘制出的像素颜色 = 屏幕颜色 XOR 当前颜色 |
注:
1. AND / OR / NOT / XOR 为布尔运算。
2.
"屏幕颜色"指绘制所经过的屏幕像素点的颜色。
3. "当前颜色"是指将要绘制的颜色。
返回值:
(无)
说明:
该函数设置的二元光栅操作码仅影响线条和填充(包括 IMAGE 填充)的输出,不影响文字和 IMAGE 的输出。
示例:
(无)
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!