0.前言
本次我给您带来easyX库系列的博文,本系列博文目的在于对原easyX库文档进行一个补充和注解,重在补充测试样例和实践。
easyX库本身并不值得过于学习,但是作为有C语言基础的C爱好者,学习easyX能让您对IT技术更加感兴趣。用easyX库的时候,除了编程,还能学到跟多知识,例如:“色彩模型”、“掩码”等。
使用easyX库能让我们体验到一点点开发的乐趣所在,本系列承诺将在学习末尾给出几个经典小游戏的code供您参考。
现在,在入门easyX库之前,先让我带您理解三个概念:“颜色”、“坐标”、“设备”
1.颜色(描述颜色的各种方法)
1.1.EasyX支持的颜色表示方法
EasyX使用24bit真彩色,不支持调色板模式。
- 24bit真彩色(英文名:True Color),也称为24位RGB色彩空间,是一种在计算机图形领域中常用的颜色表示方式,用于指定一种包含3种基本颜色(红、绿、蓝)的颜色,即每种基本颜色占8个比特位,共占据24个比特位。该模式下可表示 2 24 = 16 , 777 , 216 2^{24} = 16,777,216 224=16,777,216种颜色,远超过人眼可分辨的颜色数量,因此可实现非常细腻的颜色过渡。这种颜色表示方式广泛应用于计算机图形领域,包括操作系统界面、图像处理软件、视频游戏等等。需要注意的是,24bit真彩色和其他颜色表示方式(如索引色、RGB555等)之间存在差别。例如,在索引色调色板中,每个颜色由一个唯一的索引值表示,而在RGB565模式下,每个像素仅使用16位来表示颜色,因此只能表示 2 16 = 65 , 536 2^{16}=65,536 216=65,536种不同的颜色。相比之下,24bit真彩色具有更高的精度和色彩深度,可以呈现更加真实的颜色效果。
- 调色板模式(Palette Mode)是一种颜色表示方式,常见于计算机图形领域中,尤其是早期计算机和游戏机的图形处理器中。在调色板模式中,首先需要创建一张颜色表(称为调色板),其中包含若干个固定的颜色。然后,每个像素只需要指定一个特定的索引值,该索引值对应着调色板中的某个颜色。因此,调色板模式可以通过使用相对较少的位数(通常是4位或8位,即16种或256种不同的颜色)来表示一幅图像,从而可以节省内存空间,提高图像渲染速度。然而,调色板模式的缺点是色彩深度不足,难以呈现真实的、细腻的颜色过渡效果。此外,由于调色板中的颜色数量有限,相同的颜色可能会被用于多处,这可能导致图像失去细节和质感。目前,调色板模式已经逐渐被24bit真彩色等更加灵活和高保真的颜色表示方式所取代,但仍然在某些特定的应用场景中被使用,例如某些老式游戏的图形处理器中。
1.2.EasyX使用颜色的途径
1.2.1.使用自带的宏来表示颜色
常量 值 颜色
-------- -------- --------
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 亮紫
YELLOW 0x55FFFF 黄
WHITE 0xFFFFFF 白
1.2.2.使用16进制的数字表示颜色
常见的16进制表示规则为“0xbbggrr”,其中“bb”为蓝、“gg”为绿、“rr”为红。因此一串十六进制字符就可以表示一种颜色。
1.2.3.使用RGB宏合成颜色
RGB宏在Windows SDK中定义。Windows SDK全称为Windows Software Development Kit,即“Windows软件开发工具包”,是微软官方提供的一套用于开发Windows操作系统上应用程序的工具集合。包含了许多常用的工具和库,如编译器、调试器、API 文档、示例代码等,提供了完整的开发环境和必要的资源,方便开发者进行开发和测试Windows应用程序。其中最重要的是Windows API(Application Programming Interface)文档,描述了Windows操作系统所提供的各种编程接口,方便开发者在程序中调用系统功能。Windows SDK随着不同版本的Windows操作系统一起发布,因此不同版本的Windows SDK支持的操作系统版本也有所不同。开发者可以根据自己的需求下载和安装对应版本的 Windows SDK,来满足开发需要。此外,Windows SDK中还包含了.NET Framework和Visual Studio相关的工具和库,可用于开发.NET应用程序和Visual Studio扩展等。
COLORREF RGB(
BYTE byRed, // 颜色的红色部分
BYTE byGreen, // 颜色的绿色部分
BYTE byBlue // 颜色的蓝色部分
);
//参数:
//byRed颜色的红色部分,取值范围:0~255。
//byGreen颜色的绿色部分,取值范围:0~255。
//byBlue颜色的蓝色部分,取值范围:0~255。
//返回值:
//返回合成的颜色
可以通过GetRValue、GetGValue、GetBValue宏从RGB颜色中分离出红、绿、蓝颜色分量。
1.2.4.使用HSLtoRGB、HSVtoRGB转换其他色彩模型到RGB颜色
- HSL颜色模型不同于RGB模型,是一种基于色调、饱和度和亮度三个参数的颜色模式,常用于图形设计和Web设计中。HSL分别表示色调(Hue)、饱和度(Saturation)和亮度(Lightness)。色调表示颜色在色轮上的位置,饱和度表示颜色的纯度或深浅程度,亮度表示颜色的明暗程度。
//该函数用于转换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颜色
- HSV颜色模型:HSV是一种基于色相、饱和度和值三个参数的颜色模式,与HSL颜色模式类似,常用于图形设计和Web设计中。HSV分别表示色相(Hue)、饱和度(Saturation)和值(Value)。颜色的色相、饱和度和值分别对应着颜色在圆锥体上的位置、纯度和亮度。
COLORREF HSVtoRGB(
float H,
float S,
float V
);
//参数:
//H 是英文 Hue 的首字母,表示色相,即组成可见光谱的单色。红色在 0 度,绿色在 120 度,蓝色在 240 度,以此方向过渡。
//S 是英文 Saturation 的首字母,表示饱和度,等于 0 时为灰色。在最大饱和度 1 时,每一色相具有最纯的色光。
//V 是英文 Value 的首字母,表示明度,等于 0 时为黑色,在最大明度 1 时,是色彩最鲜明的状态。
//返回值:
//返回对应的RGB颜色
1.2.5.四种方法的使用例子
以下是几种设置画线颜色的方法
setlinecolor(0xff0000);
setlinecolor(BLUE);
setlinecolor(RGB(0, 0, 255));
setlinecolor(HSLtoRGB(240, 1, 0.5));
2.坐标(描述坐标系)
在easyX库中有两种坐标:物理坐标、逻辑坐标。
2.1.物理坐标
物理坐标是描述设备(这里的设备是指easyX库中的设备)的坐标体系。坐标原点在设备的左上角,X轴向右为正,Y轴向下为正,度量单位是“像素”。坐标原点、坐标轴方向、缩放比例都不能改变。
2.2.逻辑坐标
逻辑坐标是在程序中用于绘图的坐标体系。坐标默认的原点在窗口的左上角,X 轴向右为正,Y 轴向下为正,度量单位是“点”。默认情况下,逻辑坐标与物理坐标是一一对应的,一个逻辑点等于一个物理像素。在easyX库帮助手册中,凡是没有注明的坐标,均指逻辑坐标。
3.设备(描述“设备”概念)
在easyX库中“设备”是指绘图表面。分两种,一种是默认的绘图窗口,另一种是IMAGE对象。通过SetWorkingImage()可以设置当前用于绘图的设备。设置当前用于绘图的设备后,所有的绘图函数都会绘制在该设备上。