SimpleCG绘图函数(10)--基础参数属性设置函数

news2025/1/20 10:50:57

        在前面的绘画过程中,我们已经使用过设置线条颜色等函数。本篇我们来系统讲解绘图属性的设置函数。

一、边框线条参数属性


//设置当前设备线条颜色。
COLORREF setlinecolor( COLORREF nColor );
//设置当前设备线条宽度。
int setlinewidth( int nWidth );
//设置当前设备线条样式。
int setlinestyle( int nStyle );
//设置当前设备线条
void setline( int nStyle, int nWidth, COLORREF nColor );

我们前面看到图形绘制一般有四种方式,分别是无填充、单纯填充、既有边框又有填充、以及清空模式。其中无填充模式及既有边框又有填充模式将会在图形外框用线条描绘边框,而描绘的线条有三种属性,分别是颜色、粗细、以及样式。线条属性参数就是用来设置前面三种属性的,其中setline可以一次同时设置三种属性。其他三个函数分别与相应属性对应。下面分别以不同属性绘制一个相同半径的圆演示一下不同效果。

    //默认情况
	circle(50,50,20);

	//改变边框线条大小
	int i=0;
	for( i=1; i<=7; ++i)
	{
		setlinewidth(i);
		circle(50*i,100,20);
	}
	//改变颜色
	COLORREF pColor[]={ RGB(255,0,0), RGB(255,128,0), RGB(255,255,0), RGB(0,255,0), RGB(0,0,255), RGB(255,0,255), RGB(128,0,255)};
	for( i=0; i<7; ++i)
	{
		setlinecolor(pColor[i]);
		circle(50*(i+1),150,20);
	}

	//改变样式
	setlinewidth(1);
	for( i=0; i<7; ++i)
	{
		setlinestyle(PS_SOLID+i);
		circle(50*(i+1),200,20);
	}

各种效果比对:

 二、图形填充颜色

//设置当前设备背景颜色。
void setbackcolor( COLORREF nColor );
//设置当前设备填充颜色。
void setfillcolor( COLORREF nColor );

setfillcolor这个函数比较简单,只要一个代表颜色值的参数,指定相应颜色,其中RGB颜色可以采用RGB(r,g,b)宏进行设置。填充属性主要针对图形绘制函数,当使用fill和solid开头的函数时将依据设置的颜色在内部填充对应的颜色。

下面将简单演示各种颜色绘制实心圆

	int i=0;
	COLORREF pColor[]={ RGB(255,0,0), RGB(255,128,0), RGB(255,255,0), RGB(0,255,0), RGB(0,0,255), RGB(255,0,255), RGB(128,0,255)};
	for( i=0; i<7; ++i)
	{
		setfillcolor(pColor[i]);
		fillcircle(50*(i+1),50,20);
		solidcircle(50*(i+1),100,20);
	}

演示如下

而setbackcolor与setfillcolor类似,只是设置的是背景色。背景色针对的是clear前缀的函数。例如以下代码:

    int i=0;
	COLORREF pColor[]={ RGB(255,0,0), RGB(255,128,0), RGB(255,255,0), RGB(0,255,0), RGB(0,0,255), RGB(255,0,255), RGB(128,0,255)};
	for( i=0; i<7; ++i)
	{
		setbackcolor(pColor[i]);
		fillcircle(50*(i+1),50,20);
		clearcircle(50*(i+1),100,20);
	}

效果如图:

可以看到颜色改变只影响clear函数,不影响fill函数。

三、设置当前多边形填充模式

//设置当前多边形填充模式
int setpolyfillmode( int nMode );

setpolyfillmode设置多边形的填充模式,参数nMode可取两种模式:enumPFM_ALTERNATE和enumPFM_WINDING模式。其中默认的enumPFM_ALTERNATE模式已经在前面的多变形绘制篇幅中进行了介绍,在此我们讲一下enumPFM_WINDING迂回模式。在迂回模式中,与间隔填充一样,假想一根从左往右的扫描线,根据遇到的多边形边线来判断填充,遇到奇数边开始填充,主要区别在于遇到偶数边时需要根据线条上穿和下穿条数是否相等决定是否结束填充,相等时结束填充,不等时需要填充。可以观察以下代码,以不同模式绘制同样的五角星来看看填充模式的区别。

	POINT pt[]={{20,120},{380,120},{20,250},{200,20},{300,250}};
	setfillcolor(RGB(220,240,255));
	fillpolygon(pt,sizeof(pt)/sizeof(pt[0]));

	int i=0;
	for( i=0; i<sizeof(pt)/sizeof(pt[0]); ++i)
	{
		pt[i].y+=300;
	}
	setpolyfillmode(enumPFM_WINDING);
	fillpolygon(pt,sizeof(pt)/sizeof(pt[0]));

演示结果

四、设置原点坐标

//设置原点坐标,返回原原点
bool setorigin(int nX, int nY, POINT *pptOld);

setorigin可以设置逻辑坐标原点,这样可以改变默认以左上角为坐标原点,使得坐标(0,0)表示的坐标变为所设置的坐标,对于坐标变换非常方便。例如以下代码,同样在坐标(0,0)为圆心绘制圆,可以通过改变坐标原点方式将圆绘制于新的位置。


	circle(50,50,50);

	setorigin(200,100,NULL);
	circle(50,50,50);

如图

 五、设置缩放比例

//设置缩放比例
bool setmapratio(float fX, float fY );

除了设置原点外,还可以重定义坐标缩放比例,通过setmapratio函数可以设置x和y方向的缩放比例,通过设置负数甚至可以改变坐标方向。例如以下代码,同样的半径绘制圆,可以通过改变缩放比例的方式将圆绘制成不同比例的图形,或者放大缩小。

    circle(50,50,50);

	setmapratio(1,3);
	circle(150,150,50);
	setmapratio(2,1);
	circle(150,150,50);

如图所示

所有坐标都进行了缩放,包括圆心和半径。

六、获取参数属性

所有当前属性值可通过以下函数进行获取

//获取当前设备背景颜色。
COLORREF getbackcolor( );
//获取当前设备填充颜色。
COLORREF getfillcolor( );
//获取当前设备线条颜色。
COLORREF getlinecolor( );
//获取当前设备线条宽度。
int getlinewidth( );
//获取当前设备线条样式。
int getlinestyle( );

//获取当前多边形填充模式
int getpolyfillmode();

//获取原点坐标
bool getorigin( POINT *pptOld );

七、总结

以上就是一些常用的基础参数的设置与获取,还有其他不常用但也非常重要的参数使用方法将在后面进行介绍。例如文字背景模式、颜色叠加模式、窗口获取等。

SimpleCG库安装

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

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

相关文章

安卓绘制原理之 那些年遇到的requestLayout埋下的坑

需要了解的知识&#xff1a;安卓绘制原理概览_油炸板蓝根的博客-CSDN博客 对于调用过requestLayout的View&#xff0c;PFLAG_FORCE_LAYOUT标记在requestLayout之后&#xff0c;onLayou完成之前都是一直存在的&#xff1b;对于ViewGroup而言&#xff0c;layout children都是在on…

Linux ipc通信(消息对列)

前言&#xff1a;消息队列也是linux开发ipc机制中较为重要的一个进程间通信机制。 1.系统创建或获取消息对列 int msgget(key_t key, int mode); 创建消息队列&#xff0c;或者获取消息队列。 参数&#xff1a; key - 使用ftok()获取到的key mode - IPC_CREAT|0666 返回&…

级联H桥储能变流器仿真

1.单个H桥模块的工作状态 2.仿真模型 3.仿真结果 3.1逆变电压网侧电压网侧电流 3.2功率跟踪情况 3.3电流跟踪情况 3.4电池SOC变化曲线 3.5相内SOC均衡效果 3.6相间SOC均衡效果 3.7最大零序电压注入与均衡速度 欢迎同行技术交流&#xff0c;联系方式见置顶文章的底部

NLP(4)--BERT

目录 一、自监督学习 二、BERT的两个问题 三、GLUE 四、BERT与Transformer的关系 五、BERT的训练方式 六、BERT的四个例子 1、语句分类&#xff08;情感分析&#xff09; 2、词性标注 3、立场分析 4、问答系统 七、BERT的后续 1、为什么预训练后的微调可以满足多…

408-2011

一、选择题&#xff08;2分/题&#xff09; 1.设 n 是描述问题规模的非负整数&#xff0c;下列程序片段的时间复杂度是______。 x2; while(x<n/2){x2*x; } A.O() B.O(n) C.O() D.O(n^2) 解答&#xff1a;A 假设执行 y次&#xff0c;则 (2^y)*xn/2,y&a…

艺术与AI:科技与艺术的完美融合

文章目录 艺术创作的新工具生成艺术艺术与数据 AI与互动艺术虚拟现实&#xff08;VR&#xff09;与增强现实&#xff08;AR&#xff09;机器学习与互动性 艺术与AI的伦理问题结语 &#x1f389;欢迎来到AIGC人工智能专栏~艺术与AI&#xff1a;科技与艺术的完美融合 ☆* o(≧▽≦…

机器学习笔记之最优化理论与方法(十)无约束优化问题——共轭梯度法背景介绍

机器学习笔记之最优化理论与方法——共轭梯度法背景介绍 引言背景&#xff1a;共轭梯度法线性共轭梯度法共轭方向共轭VS正交共轭方向法共轭方向法的几何解释 引言 本节将介绍共轭梯度法&#xff0c;并重点介绍共轭方向法的逻辑与几何意义。 背景&#xff1a;共轭梯度法 关于…

VAN LKA、LSKA

Visual Attention Network 2022 大核注意力机制LKA 在本文中&#xff0c;提出了一种新的大核注意力large kernal attention&#xff08;LKA&#xff09;模型&#xff0c; LKA吸收了卷积和自注意的优点&#xff0c;包括局部结构信息、长程依赖性和适应性。同时&#xff0c;避免…

【结合AOP与ReflectUtil对返回数据进行个性化填充展示】

结合AOP与ReflectUtil对返回数据进行个性化填充展示 背景 对于接口列表返回的数据&#xff0c;我们通常有时候会对某些特殊的字段进行转化&#xff0c;或者根据某逻辑进行重新赋值&#xff0c;举个例子&#xff0c; 比如返回的列表数据中有性别sex&#xff0c;我们通常会同时…

柏林噪声 (PERLIN NOISE)

简介 柏林噪声旨在描述自然中的随机效果&#xff0c;它创建的纹理可以直接运用于顶点着色器&#xff0c;而不是生成一张纹理图&#xff0c;然后用传统的纹理映射技术把贴图附加到一个三维物体上。 这也就相当于&#xff0c;纹理将不需要适应表面&#xff0c;我们只需要提供每个…

【算法训练-链表 七】【排序】:链表排序、链表的奇偶重排、重排链表

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【链表的排序】&#xff0c;使用【链表】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&am…

【LeetCode每日一题合集】2023.9.4-2023.9.10(⭐二叉树的重建二分答案拓扑排序)

文章目录 449. 序列化和反序列化二叉搜索树⭐⭐⭐⭐⭐&#xff08;二叉树的重建&#xff09;解法相关题目——297. 二叉树的序列化与反序列化⭐⭐⭐⭐⭐解法——深度优先搜索 2605. 从两个数字数组里生成最小数字哈希表分情况讨论位运算表示集合&#xff0c;分情况讨论&#x1…

Day60|单调栈part03:84.柱状图中最大的矩形

柱状图中最大的矩形 leetcode链接&#xff1a;力扣题目链接 视频链接&#xff1a;单调栈&#xff0c;又一次经典来袭&#xff01; LeetCode&#xff1a;84.柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;…

【多线程】线程安全的单例模式

线程安全的单例模式 饿汉模式懒汉模式单线程版多线程版多线程版(改进) 单例模式能保证某个类在程序中只存在 唯一 一份实例, 而不会创建出多个实例&#xff0c;从而节约了资源并实现数据共享。 比如 JDBC 中的 DataSource 实例就只需要一个. 单例模式具体的实现方式, 分成 “饿…

Unity3D URP 仿蜘蛛侠风格化BloomAO

Unity3D URP 仿蜘蛛侠风格化Bloom&AO BloomBloom效果流程&#xff1a;制作控制面板VolumeComponent.CSCustom Renderer FeatherCustom Renderer PassBloom ShaderComposite Shader 完善Custom Feather风格化AO 总结 本篇文章介绍在URP中如何进行风格化后处理&#xff0c;使…

【MATLAB第74期】#源码分享 | 基于MATLAB的ARX-ARMAX线性自回归移动平均外生模型(结合最小二乘思路)

【MATLAB第74期】#源码分享 | 基于MATLAB的ARX-ARMAX线性自回归移动平均外生模型&#xff08;结合最小二乘思路&#xff09; 根据ARX预测输出和实际输出的误差向量&#xff0c;采用ARMAX算法结合ARX误差建模&#xff0c;对预测值进一步细化。通过将误差描述为白噪声的移动平均…

Spring事务管理: 构建稳健的数据库事务处理

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

C++算法 —— 动态规划(4)子数组

文章目录 1、动规思路简介2、最大子数组和3、环形子数组的最大和4、乘积最大子数组5、乘积为正数的最长子数组长度6、等差数列划分7、最长湍流子数组8、单词拆分9、环绕字符串中唯一的子字符串 每一种算法都最好看完第一篇再去找要看的博客&#xff0c;因为这样会帮你梳理好思路…

商城系统优化

1、DB、模板的渲染速度&#xff08;thymeleaf&#xff09;、静态资源、日志、JVM 数据库的优化&#xff08;参照数据库优化课程&#xff09;使用索引&#xff0c;减少数据库的交互次数、缓存 thymeleaf使用缓存 静态资源&#xff1a;放到nginx中&#xff0c;实现动静分离 2、…

【数学】ABC 319 E

E - Bus Stops 题意&#xff1a; 思路&#xff1a; 感觉思路比较简单 首先注意到每个询问的范围是1e9&#xff0c;不难想到答案一定存在某个循环节&#xff0c;最后一定是要 %T的 那么问题就在于找到这个循环节是什么 猜想循环节为lcm(p1, p2, p3, ....) 用小数据验证 n…