easyX库颜色模型和颜色及样式设置相关函数(注释版)

news2024/11/17 11:22:09

0.颜色模型和颜色及样式设置相关函数概览

本次我给你带了easyX库系列的颜色模型和样式设置的相关函数,希望您能看得开心。

函数或数据类型描述
LINESTYLE画线样式对象。
FILLSTYLE填充样式对象。
setbkcolor设置当前设备绘图背景色。
setlinecolor设置当前设备画线颜色。
setlinestyle设置当前设备画线样式。
setfillcolor设置当前设备填充颜色。
setfillstyle设置当前设备填充样式。
setpolyfillmode设置当前设备多边形填充模式。
setbkmode设置当前设备图案填充和文字输出时的背景模式。
setrop2设置当前设备二元光栅操作模式。
getbkcolor获取当前设备背景色。
getlinecolor获取当前设备画线颜色。
getlinestyle获取当前设备画线样式。
getpolyfillmode获取当前设备多边形填充模式。
getfillcolor获取当前设备填充颜色。
getfillstyle获取当前设备填充样式。
getbkmode获取当前设备图案填充和文字输出时的背景模式。
getrop2获取当前设备二元光栅操作模式。

1.颜色模型

结合我们之前提到的颜色模型:RGB模型、HSL模型、HSV模型,本次我们来看看有关颜色模型的操作。

1.0.RGB宏

1.0.1.RGB:通过红、绿、蓝颜色分量合成颜色

COLORREF RGB(
	BYTE byRed,		// 颜色的红色部分
	BYTE byGreen,	// 颜色的绿色部分
	BYTE byBlue		// 颜色的蓝色部分
);
//参数
//byRed:颜色的红色部分,取值范围:0~255
//byGreen:颜色的绿色部分,取值范围:0~255
//byBlue:颜色的蓝色部分,取值范围:0~255

//返回值
//返回合成的颜色

1.0.2.BGR:交换颜色中的红色和蓝色

COLORREF BGR(COLORREF color);
//参数
//color:需要交换红色和蓝色的颜色

//返回值
//返回交换红色和蓝色后的颜色

1.1.提取RGB颜色

1.1.1.GetRValue:返回指定颜色中的红色值

BYTE GetRValue(COLORREF rgb);//GetRValue宏在Windows SDK中定义

1.1.2.GetGValue:返回指定颜色中的绿色值

BYTE GetGValue(COLORREF rgb);//GetGValue宏在Windows SDK中定义

1.1.3.GetBValue:返回指定颜色中的蓝色值

BYTE GetBValue(COLORREF rgb);//GetBValue宏在Windows SDK中定义

1.2.RGB转化为HSL、HSV、GRAY

1.2.1.RGBtoHSL:转换RGB颜色为HSL颜色

void RGBtoHSL(
	COLORREF rgb,
	float *H,
	float *S,
	float *L
);
//参数
//rgb:原RGB颜色
//H用于返回HSL颜色模型的Hue(色相)分量,0 <= H < 360
//S用于返回HSL颜色模型的Saturation(饱和度)分量,0 <= S <= 1
//L用于返回HSL颜色模型的Lightness(亮度)分量,0 <= L <= 1。

//返回值
//无

2.2.2.RGBtoHSV:转换RGB颜色为HSV颜色

void RGBtoHSV(
	COLORREF rgb,
	float *H,
	float *S,
	float *V
);
//参数
//rgb:原RGB颜色。
//H用于返回HSV颜色模型的Hue(色相)分量,0 <= H < 360
//S用于返回HSV颜色模型的Saturation(饱和度)分量,0 <= S <= 1
//V用于返回HSV颜色模型的Value(明度)分量,0 <= V <= 1

//返回值
//无

1.2.3.RGBtoGRAY:转换RGB颜色为GAY灰度颜色

COLORREF RGBtoGRAY(
	COLORREF rgb
);
//参数
//rgb:原RGB颜色

//返回值
//对应的灰度颜色

1.3.HSL、HSV转化为RGB

1.3.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颜色

1.3.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颜色

2.颜色及样式设置相关函数

2.1.两个对象

下面两个对象都是使用C++的关键字class实现的,class可以理解为是升级版的struct,easyX库中两个对象都有暴露出几个公有成员供我们使用,其具体用法,等后面使用的时候再说。

2.1.1.LINESTYLE:画线样式对象

class LINESTYLE();
//公有成员
//DWORD style:画线样式,详见setlinestyle函数的style参数
//DWORD thickness:线的宽度,以像素为单位
//DWORD* puserstyle:用户自定义样式数组,详见setlinestyle函数的puserstyle参数
//DWORD userstylecount:用户自定义样式数组的元素数量

//备注
//参数的详细含义及使用方法请参考setlinestyle函数

如果您没学过C++,可以暂时使用struct来理解,当然这种理解并不够严谨。

typedef struct LINESTYLE
{
	DWORD style;//画线样式,详见setlinestyle函数的style参数 
    DWORD thickness;//线的宽度,以像素为单位 
    DWORD* puserstyle;//用户自定义样式数组,详见setlinestyle函数的puserstyle参数 
  	DWORD userstylecount;//用户自定义样式数组的元素数量
  	……
}LINESTYLE;

2.1.2.FILLSTYLE:填充样式对象

class FILLSTYLE();
//公有成员
//int style:填充形式,详见setfillstyle函数重载的style参数
//long hatch:填充图案样式,详见setfillstyle函数重载的hatch参数
//IMAGE* ppattern:填充图像,详见setfillstyle函数重载的ppattern参数

//备注
//参数的详细含义及使用方法请参考setfillstyle函数

如果您没学过C++,可以暂时使用struct来理解,当然这种理解并不够严谨。

typedef struct FILLSTYLE
{
	int style;//填充形式,详见setfillstyle函数重载的style参数
	long hatch;//填充图案样式,详见setfillstyle函数重载的hatch参数
	IMAGE* ppattern;//填充图像,详见setfillstyle函数重载的ppattern参数
  	……
}FILLSTYLE;

2.2.设置颜色和样式

2.2.1.setbkcolor:设置当前设备背景色

void setbkcolor(COLORREF color);
//参数
//color指定要设置的背景颜色

//返回值
//无

注意这里的设置设备背景色,并不是立刻改变此时的背景颜色,而是改变此时背景色的值。再次刷新绘画设备更新背景时才会真正换背景颜色。例如:在使用outtextxy()或者cleardevice()时(前者是在绘画区域指定的地方输出字符串。后者之前有讲过,是用来清除屏幕内容的。)

//使用例子
#include <graphics.h>
#include <cstdio>

int main()
{
	// 初始化绘图窗口
	initgraph(640, 480);
	getchar();

	// 设置背景色为蓝色
	setbkcolor(BLUE);
	getchar();

	// 用背景色清空屏幕
	cleardevice();
	getchar();

	// 设置背景色为红色
	setbkcolor(RED);
	getchar();

	// 用背景色清空屏幕
	cleardevice();
	getchar();

	// 按任意键退出
	closegraph();
	getchar();
}

2.2.2.setlinecolor:设置当前设备画线颜色

void setlinecolor(COLORREF color);

只有使用setlinecolor()提前设置好线条的颜色,才能使用不同颜色的线条。

//使用例子
#include <graphics.h>
#include <conio.h>
#include <cstdio>

int main()
{
	// 初始化绘图窗口
	initgraph(640, 480);
	getchar();

	// 设置背景色为蓝色
	setbkcolor(BLUE);
	getchar();

	// 用背景色清空屏幕
	cleardevice();
	getchar();

	// 设置绘图色为绿色
	setlinecolor(GREEN);
	// 画矩形
	rectangle(100, 100, 300, 300);
	getchar();

	// 设置背景色为红色
	setbkcolor(RED);
	getchar();

	// 用背景色清空屏幕
	cleardevice();
	getchar();

	// 按任意键退出
	closegraph();
	getchar();
}

2.2.3.setlinestyle:设置当前设备画线样式

void setlinestyle(
	const LINESTYLE* pstyle
);
//参数
//pstyle:指向画线样式LINESTYLE的指针
//返回值
//无

void setlinestyle(
	int style,
	int thickness = 1,
	const DWORD *puserstyle = NULL,
	DWORD userstylecount = 0
);
//style:画线样式(详见下面的三个表格)
//thickness:线的宽度,以像素为单位,默认值为1
//puserstyle:用户自定义样式数组,仅当线型为PS_USERSTYLE时该参数有效。
	//数组第一个元素指定画线的长度
	//第二个元素指定空白的长度
	//第三个元素指定画线的长度
	//第四个元素指定空白的长度,以此类推……
//userstylecount:用户自定义样式数组的元素数量

需要注意的是setlinestyle()有重载版本(即,上面两个函数定义都是setlinestyle()的定义,这是C++的特性,是C所没有的)

其中对于参数style的不同值指定了不同的画线样式:直线样式、端点样式、连接样式。k可以使用“|”符号组合多种类型的样式,但是每一类的样式只能使用一个,其取值如下表格:

  1. 直线样式
    在这里插入图片描述

  2. 端点样式
    在这里插入图片描述

  3. 连接样式
    在这里插入图片描述

//使用例子
#include <graphics.h>
#include <cstdio>

int main()
{
	// 初始化绘图窗口
	initgraph(640, 480, EX_SHOWCONSOLE);
	getchar();

	// 设置背景色为蓝色
	setbkcolor(BLUE);
	getchar();

	// 用背景色清空屏幕
	cleardevice();
	getchar();

	// 设置线的样式和颜色
	setlinecolor(RED);
	setlinestyle(PS_DASH ,2);
	getchar();

	// 画圆
	circle(100, 100, 50);
	getchar();
 
  	// 设置线的样式和颜色
	setlinecolor(RED);
	DWORD a[4] = { 10, 40, 30, 20 };
	setlinestyle(PS_USERSTYLE | PS_ENDCAP_FLAT, 5, a, 4);
	getchar();

	// 画圆
	circle(250, 250, 150);
	getchar();

	// 按任意键退出
	closegraph();
	getchar();
}

这个函数还有一些讲不清楚的,等以后我们再回来讲解(等整个系列到达末尾,我会重新回来复习这些似懂非懂的地方)

2.2.4.setfillcolor:设置当前设备填充颜色

void setfillcolor(COLORREF color);

有的时候我们不单单只是使用线条构图,还有的时候需要使用封闭的多边形组合为一个形状,这个时候这些多边形可能就需要填充对应的颜色,有关多边形的绘制我们以后再提及,这里只是进行了简单的使用。

//使用例子
#include <graphics.h>
#include <cstdio>

int main()
{
	// 初始化绘图窗口
	initgraph(640, 480, EX_SHOWCONSOLE);
	getchar();

	// 设置背景色为蓝色
	setbkcolor(BLUE);
	getchar();

	// 用背景色清空屏幕
	cleardevice();
	getchar();

	// 设置线条颜色和样式
	setlinecolor(YELLOW);
	DWORD a[4] = { 10, 40, 30, 20 };
	setlinestyle(PS_USERSTYLE | PS_ENDCAP_FLAT, 5, a, 4);
	getchar();

	// 设置填充颜色
	setfillcolor(RED);
	getchar();

	// 画实心圆
	fillcircle(200, 200, 100);
	getchar();

	// 按任意键退出
	closegraph();
	getchar();
}

2.2.5.setfillstyle:设置当前设备填充样式

多边形除了设置填充颜色,还有一些填充样式有时也是我们所需要的,设置填充样式的函数setfillstyle()也有几个重载函数。

void setfillstyle(
	FILLSTYLE* pstyle
);
//pstyle:指向填充样式 FILLSTYLE 的指针。

void setfillstyle(
	int style,
	long hatch = NULL,
	IMAGE* ppattern = NULL
);
//style:指定填充样式,取值详见下面的表格
//hatch:指定填充图案,仅当style为BS_HATCHED时有效。填充图案的颜色由函数setfillcolor设置,背景区域使用背景色还是保持透明由函数setbkmode设置,取值详见下面的表格
//ppattern:指定自定义填充图案或图像,仅当style为BS_PATTERN或BS_DIBPATTERN时有效。当style为BS_PATTERN时,ppattern指向的IMAGE对象表示自定义填充图案,IMAGE中的黑色(BLACK)对应背景区域,非黑色对应图案区域。图案区域的颜色由函数settextcolor设置。当style为BS_DIBPATTERN时,ppattern指向的IMAGE对象表示自定义填充图像,以该图像为填充单元实施填充。

void setfillstyle(
	BYTE* ppattern8x8
);
//ppattern8x8:指定自定义填充图案,效果同BS_PATTERN,该重载以BYTE[8]数组定义8 x 8区域的填充图案。数组中,每个元素表示一行的样式,BYTE类型有8位,按位从高到低表示从左到右每个点的状态,由此组成8 x 8的填充单元,将填充单元平铺实现填充。对应的二进制位为0表示背景区域,为1表示图案区域。
  1. style取值
    在这里插入图片描述

  2. hatch取值
    在这里插入图片描述

  3. 对于两个奇怪的参数ppattern和ppattern8x8。这两个参数我也没搞懂,以后再来细细研究把……

//使用例子
#include <graphics.h>
#include <cstdio>

int main()
{
    // 初始化图形窗口
    initgraph(640, 480, EX_SHOWCONSOLE);
    getchar();

    // 绘制红色矩形并使用默认填充模式填充
    setfillcolor(RED);
    setfillstyle(BS_HATCHED, HS_VERTICAL);
    fillrectangle(100, 100, 200, 200);
    getchar();

    // 绘制蓝色圆形并使用自定义填充样式填充
    setfillcolor(BLUE);
    setfillstyle(BS_HATCHED, HS_HORIZONTAL);
    fillcircle(350, 150, 50);
    getchar();

    // 等待用户按键并关闭图形窗口
    closegraph();
    getchar();
    return 0;
}

2.2.6.setpolyfillmode:设置当前设备多边形填充模式

为避免混淆,这个函数先不管了,以后再来研究。

2.2.7.setbkmode:设置当前设备图案填充和文字输出时的背景模式

为避免混淆,这个函数先不管了,以后再来研究。

2.2.8.setrop2:设置当前设备二元光栅操作模式

为避免混淆,这个函数先不管了,以后再来研究。

2.3.获取颜色和样式

2.3.1.getbkcolor:获取当前设备背景色

COLORREF getbkcolor();

2.3.2.getlinecolor:获取当前设备画线颜色

COLORREF getlinecolor();

2.3.3.getlinestyle:获取当前设备画线样式

void getlinestyle( LINESTYLE* pstyle );

2.3.4.getfillcolor:获取当前设备填充颜色

COLORREF getfillcolor();

2.3.5.getfillstyle:获取当前设备填充样式

void getfillstyle( FILLSTYLE* pstyle );

2.3.6.getpolyfillmode:获取当前设备多边形填充模式

int getpolyfillmode();

2.3.7.getbkmode:获取当前设备图案填充和文字输出时的背景模式

int getbkmode();

2.3.8.getrop2:获取当前设备二元光栅操作模式

int getrop2();

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

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

相关文章

[易语言][原创]使用易语言部署yolov8的onnx模型

易语言部署yolo系列模型&#xff0c;现在网上有很多但是他们不够简洁也不够专业&#xff0c;有人专门把opencv封装成易语言支持库然后用opencv在易语言端写&#xff0c;其实这种效率没有在C直接推理效率高&#xff0c;因为易语言往C传递图像数据集是需要转换图像数据集格式才能…

十一、docker学习-docker核心之docker网络(1)

docker网络 当开始大规模使用docker时&#xff0c;你会发现需要了解很多关于网络的知识。docker作为目前最火的轻量级容器技术&#xff0c;有很多令人称道的功能&#xff0c;如docker的镜像管理。然而&#xff0c;docker同样有着很多不完善的地方&#xff0c;网络方面就是Dock…

Nexus搭建Maven私有库介绍

为什么需要Maven私有库&#xff1f; 使用Maven获取Java依赖包的时候&#xff0c; 默认是从Maven的中央库下载 jar文件&#xff0c; 中央库的地址是&#xff1a; https://repo.maven.apache.org/maven2 。 如果下载速度慢&#xff0c; 可以使用阿里的镜像&#xff0c; 地址如下…

[元带你学: eMMC协议详解 16] eMMC 安全方案 之 设备锁定(Lock) / 解锁(Unlock) 详解

依JEDEC eMMC 5.1及经验辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 所在专栏 《元带你学: eMMC协议详解》 内容摘要 全文 4100 字&#xff0c; 内容摘要 1. 锁定与解锁的概念&#xff1f; 2. 设置密码的方法和注意点&#xff1f; 3. 重置密码的方法和注意点&…

(Linux) WSL 适用于Linux的Windows子系统

文章目录 前言环境设置开发者选项启用或关闭Windows功能进入Microsoft应用商场下载下载完成开启PS: 查看运行效果 Linux基础配置环境缺失注册账号设置root账户密码常用环境的安装 VS Code 连接插件连接的快捷方式 END 前言 学习Linux的阻碍&#xff0c;往往第一步就是没有Linu…

Java实现图片的上传和显示

⭐简单说两句⭐ 作者&#xff1a;后端小知识 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 文章目录 &#x1f388;前言&#x1f384;前端&#xff1a;&#x1…

ESP32网络应用 -- ESP32-S3使用HTTP协议获取城市天气数据

超文本传输协议(Hypertext Transfer Protocol,HTTP),是一种建立在TCP协议之上,应用非常广泛的请求-响应协议,关于HTTP协议的详细描述,网上已经不乏文章,此处不再详细论述。 作为一款网络功能强大Wi-Fi SOC芯片,ESP32-S3可以通过ESP-IDF编程框架提供的应用程序接口,方…

腾讯云3年轻量应用服务器入口(不要一年的坑)

腾讯云轻量应用服务器2核2G4M和2核4G5M可以一次性选三年&#xff0c;3年轻量2核2G4M带宽396元三年、3年轻量2核4G5M服务器628元三年&#xff0c;轻量应用服务器第二年xufei贵&#xff0c;大家都知道&#xff0c;所以一次性选三年&#xff0c;毕竟限制条件是腾讯云新用户&#x…

8年测试超强整理,性能测试-压力测试-负载测试,卷起来...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 软件测试包括不同…

软件测试第一次做项目之银行项目【操作细节总结】

在我们的日常在金融或银行软件测试工作中都有哪些内容需要测试&#xff1f;在这些测试的内容中如何去更好的掌握测试技能保证测试质量&#xff0c;一起来学习探讨交流。 下面为银行测试点的概括&#xff1a; 根据上图&#xff0c;我们可以从以下几个方面重点关注&#xff1a; …

跨国能源公司如何成功地完成SAP S/4HANA迁移

哪种升级转换方法更适合跨国集团的S/4HANA 实施&#xff0c;如果数据需要选择性迁移&#xff0c;并且ERP系统的停机时间要降至最低&#xff1f;与 IBM 和 SNP 合作的客户Arauco Group&#xff0c;该企业的成功案例提供了一些启示。 ARAUCO是世界领先的可再生能源生产商之一&am…

Security 详解—原理(1)

1.简介&#xff1a; Spring 是非常流行和成功的 Java 应用开发框架&#xff0c;Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架&#xff0c;提供了一套 Web 应用安全性的完整解决方案。 1.1 特性&#xff1a; 支持对身份认证和访问鉴权的自定义…

不可盲目优化,否则不是缘木求鱼就是南辕北辙

作为在编码这块自留地里深耕多年的码农&#xff0c;凭借着自认为丰富的经验加上专业领域的博览群书&#xff0c;自觉对程序优化还是有点感觉、有点心得的。但最近的经历让我不得不感慨&#xff0c;“不听老人言&#xff0c;吃亏在眼前“还是很有道理的。 软件优化这件事&#x…

VS code安装与配置

1.VS code介绍 2.VS code安装 2.1解压&#xff0c;并打开解压之后的文件夹&#xff0c;点击VSCodeUserSetup-x64-1.67.0&#xff0c;右击&#xff0c;选择以管理员身份运行 2.2点击同意&#xff0c;点击下一步 2.3更换安装路径 2.4点击下一步 2.5勾选创建桌面快捷方式&…

如何在 Linux 中列出 Systemd 下所有正在运行的服务

动动发财的小手&#xff0c;点个赞吧&#xff01; Linux系统提供多种系统服务&#xff08;如进程管理、登录、syslog、cron等&#xff09;和网络服务&#xff08;如远程登录、电子邮件、打印机、虚拟主机、数据存储、文件传输、域名解析等&#xff09; &#xff08;使用 DNS&am…

腾讯云服务器地域有什么区别怎么选比较好?

腾讯云服务器地域什么区别&#xff1f;云服务器地域怎么选择&#xff1f;地域是指云服务器所在机房的地理位置&#xff0c;用户距离地域越近网络延迟越低&#xff0c;速度越快&#xff0c;所以地域就近选择即可。广州上海北京等地域网站域名需要备案&#xff0c;中国香港或其他…

C# hello world

目录 一 C#简介 二 Hello world程序 三 C#未来的发展趋势 四 C#学习路线推荐 一 C#简介 C#&#xff08;C Sharp&#xff09;是微软开发的一种面向对象的编程语言&#xff0c;它于2000年发布&#xff0c;并被设计为在.NET平台上运行。C#语言具有简单、安全、类型安全、可扩…

飞只因太美,给你的首页装上吧!

原文链接&#xff1a;飞只因太美&#xff0c;给你的首页装上吧&#xff01; 推荐阅读 基于 Hexo 从零开始搭建个人博客&#xff08;一&#xff09;基于 Hexo 从零开始搭建个人博客&#xff08;二&#xff09;基于 Hexo 从零开始搭建个人博客&#xff08;三&#xff09;基于 H…

你要一定用的上的Postman 使用小技巧

目录 一、什么是 Postman&#xff08;前世今生&#xff09; 二、使用变量 2.1 变量作用域适用于 Postman 中不同的场景 2.2 编辑全局和环境变量 2.3 编辑集合变量 2.4 使用系统内置动态变量 三、Postman 请求生命周期 3.1 在前置请求&#xff08;pre-request script&…

【期末总复习】神经网络与深度学习蒲公英书

浅层学习 one-hot向量 相似度的概念 局部表示和分布式表示示例 学习器 准确率 机器学习的三个基本要素&#xff1a;模型、学习准则、优化算法 【概念】期望风险 【概念】损失函数 【运用】三分类问题 【概念】过拟合 【概念】欠拟合 超参数 【选择 / 判断】验证集概念 线性回归…