easyX基本概念(注释版)

news2024/12/24 8:39:46

0.前言

本次我给您带来easyX库系列的博文,本系列博文目的在于对原easyX库文档进行一个补充和注解,重在补充测试样例和实践。

easyX库本身并不值得过于学习,但是作为有C语言基础的C爱好者,学习easyX能让您对IT技术更加感兴趣。用easyX库的时候,除了编程,还能学到跟多知识,例如:“色彩模型”、“掩码”等。

使用easyX库能让我们体验到一点点开发的乐趣所在,本系列承诺将在学习末尾给出几个经典小游戏的code供您参考。

现在,在入门easyX库之前,先让我带您理解三个概念:“颜色”、“坐标”、“设备”

1.颜色(描述颜色的各种方法)

1.1.EasyX支持的颜色表示方法

EasyX使用24bit真彩色,不支持调色板模式。

  1. 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真彩色具有更高的精度和色彩深度,可以呈现更加真实的颜色效果。
  2. 调色板模式(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颜色

  1. 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颜色
  1. 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()可以设置当前用于绘图的设备。设置当前用于绘图的设备后,所有的绘图函数都会绘制在该设备上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI完成音频创作,击败99%作者

使用AI完成音频创作 &#xff0c;击败99%同类创作者 &#xff0c;享受持续广告变现收益 &#xff0c;下面我们来看下如何使用把~ 音频生成和投放可以分为以下两步骤&#xff1a; 使用AI效能公众号完成内容创作&#xff1b;利用喜马拉雅云剪辑发布内容 1. 内容生成 打开AI效能公…

Altium Designer 15 (AD15)新建元件库

1. 连接线 1.1 设置连接线的默认颜色&#xff0c;宽度&#xff1a;点击图标 --》按Tab键 1.2 默认使用蓝色&#xff0c;通用 2. 调出来元件库&#xff0c;然后按照元件的英文名字搜元件&#xff0c;拖到左边画图区域就可以了 3. 自己画一个元器件&#xff0c;自定义元器件 3.1…

6.14 消息队列

目录 消息队列 消息队列结构 消息队列使用步骤 消息队列创建/打开-msgget 消息队列创建/打开 - 示例 消息发送 – msgsnd 消息格式 消息发送 - 示例 笔记 消息队列 消息队列是System V IPC对象的一种 消息队列由消息队列ID来唯一标识 消息队列就是一个消息的列表。…

解决Idea中日志文件log4j.xml中http//jakarta.apache.org/log4j爆红,报错此 uri is not registered

在Idea中&#xff0c;配置log4j.xml出现“http //jakarta.apache.org/log4j/ uri is not registered”的错误信息&#xff0c;解决步骤如下&#xff1a; 1、原始的log4j.xml配置文件&#xff1a; <?xml version"1.0" encoding"GB2312" ?> <!…

ESP32(Micro Python)LVGL 四路ADC

本程序布局与上一个程序相同&#xff0c;引脚不重合&#xff0c;可以在不更换外设的情况下切换程序。由于仪表盘显示的数值范围不可调&#xff0c;实际显示的值为测量值占量程的百分比。 代码如下 import lvgl as lv import time from espidf import VSPI_HOST from ili9XX…

chatgpt赋能python:Python如何在输入之前等待30秒

Python如何在输入之前等待30秒 作为一名编程工程师&#xff0c;程序的性能和用户体验都是非常重要的。在用户输入数据之前等待一段时间可以帮助我们避免不必要的错误和提高程序的稳定性。本文将介绍如何使用Python等待30秒在输入数据。 使用Python的time模块 Python的time模…

【强烈推荐】 十多款2023年必备国内外王炸级AI工具 (免费 精品 好用) 让你秒变神一样的装逼佬感受10倍生产力 (4) AI办公

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

SLAM实战项目(2) — ROS下运行ORB-SLAM2稠密地图重建

目录 1 运行步骤 (1) 创建工作空间 (2) 修改CmakeList.txt (3) 编译 (4) 下载bag文件 (4) 编写roslaunch文件 2 运行报错 报错1&#xff1a; 报错2&#xff1a; 报错3&#xff1a; 报错4&#xff1a; ROS学习文档&#xff1a;Introduction Autolabor-ROS机器人入门…

Bert模型精讲

1.Autoregressive语言模型与Autoencoder语言模型 1.1 语言模型概念介绍 Autoregressice语言模型&#xff1a;指的是依据前面(或后面)出现的单词来预测当前时刻的单词&#xff0c;代表有ElMo, GPT等。 Autoencoder语言模型&#xff1a;通过上下文信息来预测被mask的单词&…

Linux GCC,GDB,Shell脚本,Vim的简单使用

这里写目录标题 GCC命令GDB命令Shell脚本VIM指令 GCC命令 GCC&#xff08;GNU Compiler Collection&#xff0c;GNU编译器套件&#xff09;是由GNU开发的编程语言译器 编译一个简单的.c程序&#xff1a; 四步分开写&#xff1a; gcc -E -o hello.i hello.c // 预处理 gcc -…

chatgpt赋能python:Python怎么绕过登录爬取数据

Python怎么绕过登录爬取数据 在进行网站爬取时&#xff0c;经常会发现需要登录才能访问所需要的数据&#xff0c;这给我们的爬虫程序带来了一定的难度。本文就介绍一些Python绕过登录的方法&#xff0c;让你获取到所需的数据。 1. Session维持登录状态 当我们登录一个网站时…

运维实践 | 运维打工人必备 CentOS-Linux/Stream-8 服务器系统基础安装与配置实践...

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折&#xf…

【LeetCode】python 主要元素 摩根投票法

目录 题目&#xff1a; 题解&#xff1a; 1.纯暴力&#xff08;字典&#xff09; 2. 摩根投票法 题目&#xff1a; 数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组&#xff0c;找出其中的主要元素。若没有&#xff0c;返回 -1 。请设计时间复杂度为 O(N) 、空…

电脑中的个人私密视频该怎么加密?

因为电脑内存空间较大&#xff0c;所以很多人喜欢将拍摄的视频存放在电脑中&#xff0c;这其中就会有一些比较私密&#xff0c;不适合被其他人看到的视频。为了保护这些视频的安全&#xff0c;我们需要合适的方法对其进行加密保护。下面我们就一起来了解一下电脑中的个人私密视…

GAMES101笔记 Lecture 01

目录 Overview of Computer Graphics图形学的应用场景Video GamesMoviesAnimationsDesignVisualizationVirtual RealityDigital IllustrationSimulationGraphical User InterfacesTypography 为什么要学习计算机图形学&#xff1f;Fundamental Intellectual Challenges(图形学很…

Opencv-C++笔记 (5) : opencv-形态学

文章目录 1、形态学运算与结构2、腐蚀膨胀运算3、膨胀4、自定义结构元素5、开闭运算开运算闭运算 6、形态学梯度7、其他形态学-顶帽、黑帽、击中不击中8、核函数矩形核十字形核椭圆核 1、形态学运算与结构 形态学运算是针对二值图像依据数学形态学(Mathematical Morphology)的集…

Prefix-Tuning: Optimizing Continuous Prompts for Generation

《Prefix-Tuning: Optimizing Continuous Prompts for Generation》阅读笔记 论文题目&#xff1a;Prefix-Tuning: Optimizing Continuous Prompts for Generation论文链接&#xff1a;https://arxiv.org/pdf/2101.00190论文来源&#xff1a;Arxiv &#xff08;2021&#xff0…

CentOS 7安装 Postgre

零、前置条件 系统CentOS 7&#xff0c;并已联网&#xff0c;已安装gcc或者g编译器&#xff0c;GNU make版本3.80或以上&#xff0c;系统有至少一个除root之外的普通用户user gcc安装-参考链接查看make命令的版本——make --version更新make版本-参考链接postgresql的使用一般…

【nginx】网页上传文件报错413 Request Entity Too Lange

前言 413 Request Entity Too Lange&#xff0c;由于您的请求实体太长&#xff0c;服务器无法处理。请尝试缩短请求体的内容或者采取其他方式进行操作。如果问题仍然存在&#xff0c;请检查您的请求是否符合服务器的限制和要求&#xff0c;并尝试联系服务器管理员寻求帮助 可以…

轻松掌握 Postman Newman API 测试技巧

目录 前言&#xff1a; Postman Newman 是什么&#xff1f; Postman Newman 的作用 如何使用 Postman Newman&#xff1f; 第一步&#xff1a;安装 Node.js 第二步&#xff1a;全局安装 Newman 第三步&#xff1a;导出集合或环境变量为 JSON 格式 第四步&#xff1a;使…