Easyx基本使用(二)
——三大概念
一、颜色
1. 使用预定常量
常用颜色
常量 值 颜色
-------- -------- --------
YELLOW 0x55FFFF 黄
WHITE 0xFFFFFF 白
BLACK 0 黑
BLUE 0xAA0000 蓝
GREEN 0x00AA00 绿
CYAN 0xAAAA00 青
RED 0x0000AA 红
MAGENTA 0xAA00AA 紫
BROWN 0x0055AA 棕
其他颜色
常量 值 颜色
-------- -------- --------
LIGHTGRAY 0xAAAAAA 浅灰
DARKGRAY 0x555555 深灰
LIGHTBLUE 0xFF5555 亮蓝
LIGHTGREEN 0x55FF55 亮绿
LIGHTCYAN 0xFFFF55 亮青
LIGHTRED 0x5555FF 亮红
LIGHTMAGENTA 0xFF55FF 亮紫
2. 使用16进制数字
**16 进制的颜色表示规则为:0xbbggrr (bb=蓝,gg=绿,rr=红)**
如:
- 0x00ff00 绿
- 0xff0000 蓝
- 0xffffff 黑
- 0x000000 白
3. 使用RGB合成颜色
原型
COLORREF RGB(
BYTE byRed, // 颜色的红色部分
BYTE byGreen, // 颜色的绿色部分
BYTE byBlue // 颜色的蓝色部分
);
-
byRed:红色部分,范围:0~255
-
byGreen:绿色部分,范围:2~255
-
byBlue:蓝色部分,范围:0~255
-
返回值:合成的颜色
GetRValue
BYTE GetRValue(COLORREF rgb);
- rgb:指定的颜色
- 返回值:指定颜色中的红色值,范围:0~255
GetGValue
BYTE GetGValue(COLORREF rgb);
- rgb:指定的颜色
- 返回值:指定颜色中的绿色值,范围:0~255
GetBValue
BYTE GetBValue(COLORREF rgb);
- rgb:指定的颜色
- 返回值:指定颜色中的蓝色值,范围:0~255
4. 使用 HSLtoRGB、HSVtoRGB 转换其他色彩模型到 RGB 颜色
4.1 HSLtoRGB 转换 HSL 颜色为 RGB 颜色
原型
COLORREF HSLtoRGB(
float H,
float S,
float L
);
- 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 时为白色。
4.2 HSVtoRGB 用于转换 HSV 颜色为 RGB 颜色
原型
COLORREF HSVtoRGB(
float H,
float S,
float V
);
- 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 时,是色彩最鲜明的状态。
5. 示例
setlinecolor(0xff0000);
setlinecolor(BLUE);
setlinecolor(RGB(0, 0, 255));
setlinecolor(HSLtoRGB(240, 1, 0.5));
#include<easyx.h> // easyx图形界面库头文件
#include<conio.h> // getch函数所在的头文件
int main(void) {
// 1. 初始化图形界面
initgraph(400, 400);
// 2. to do...(自己要干的事)
setlinecolor(YELLOW); // 设置线的颜色为黄色
circle(100, 100, 50);
setlinecolor(0xff0000); // 设置线的颜色为蓝色
circle(100, 200, 50);
setlinecolor(RGB(100, 0, 0));
circle(200, 100, 50);
setlinecolor(HSLtoRGB(100, 0.2, 0.2));
circle(200, 200, 50);
getch();
// 3. 关闭图形界面,释放资源
closegraph();
return 0;
}
二、坐标
1. 物理坐标
物理坐标是描述设备的坐标体系。
坐标原点在设备的左上角,X 轴向右为正,Y 轴向下为正,度量单位是像素。
坐标原点、坐标轴方向、缩放比例都不能改变。
2. 逻辑坐标
逻辑坐标是在程序中用于绘图的坐标体系。
坐标默认的原点在窗口的左上角,X 轴向右为正,Y 轴向下为正,度量单位是点。
默认情况下,逻辑坐标与物理坐标是一一对应的,一个逻辑点等于一个物理像素。
在本手册中,凡是没有注明的坐标,均指逻辑坐标。
三、设备
- 含义:绘图的对象(图像绘制到哪里)
- Easyx中设备分两种,一种是默认的绘图窗口,另一种是 IMAGE 对象
1. 默认绘图窗口
使用initgraph初始化的窗口就是默认绘图窗口,如果不进行指定那么所有的绘图都将绘制到该窗口
2. IMAGE对象
Easyx中内置的数据结构,用来保存图片数据以及使用其作为绘图设备绘制图像等
3. 更改方法
SetWorkingImage:这个函数用于设定当前的绘图设备。
void SetWorkingImage(IMAGE* pImg = NULL);
-
pImg:绘图设备指针,如果为NULL表示为默认绘图设备
-
返回值:无
-
如果需要对某个 IMAGE 做绘图操作,可以通过该函数将其设置为当前的绘图设备,之后所有的绘图语句都会绘制在该 IMAGE 上面。将参数置为 NULL 可恢复对默认绘图窗口的绘图操作。
4. 示例
#include <graphics.h>
#include <conio.h>
int main(void) {
// 初始化绘图窗口
initgraph(640, 480);
// 创建 200x200 的 img 对象
IMAGE img(200, 200);
// 设置绘图目标为 img 对象
SetWorkingImage(&img);
// 以下绘图操作都会绘制在 img 对象上面
line(0, 100, 200, 100);
line(100, 0, 100, 200);
circle(100, 100, 50);
// 设置绘图目标为绘图窗口
SetWorkingImage();
// 将 img 对象显示在绘图窗口中
putimage(220, 140, &img);
// 按任意键退出
_getch();
closegraph();
}