GDI+ 中绘制弧形文字

2023-11-03 15:10
文章标签 文字 绘制 gdi 弧形

本文主要是介绍GDI+ 中绘制弧形文字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

在 GDI+ 中使文字沿着圆周进行排列,有两种实现方法。

使用基本变换方法

①.概述

拆分字符串中的每个文字逐个进行输出,计算出每个文字输出的起始角度,然后分别进行平移变换和旋转变换后输出文字。

②.代码示例

void DemoGDI::DrawUser(HDC hdc)
{Graphics graphics(hdc);//构造 Graphics 对象Font font(L"宋体", 20, FontStyleRegular, UnitPixel);SolidBrush solidBrush(Color::Blue);StringFormat stringFormat;stringFormat.SetLineAlignment(StringAlignmentCenter);PointF cp(200,200);Pen m_pen(Color::Black);graphics.DrawEllipse(&m_pen, 50, 50, 300, 300);//圆周graphics.TranslateTransform(cp.X, cp.Y); //平移坐标原点QString m_text = "GDI+弧形文字绘制示例";float dStepAngle = 20.0f / 150.0f;//每个文字对应的角度:弧长/半径int wCount = m_text.toStdWString().size();for (int i = 0; i < wCount; i++){float dAngle = (i - wCount / 2 + 0.5)*dStepAngle;//与正北方向偏离float rAngle = 270 + qRadiansToDegrees(dAngle);//每个文字对应的起始角度float a = qDegreesToRadians(rAngle);graphics.TranslateTransform(150 * qCos(a), 150 * qSin(a));//平移坐标原点graphics.RotateTransform(REAL(rAngle + 90)); // 旋转至切线方向graphics.DrawString(m_text.toStdWString().c_str()+i, 1, &font, PointF(-10.0f, -10.0f), &stringFormat, &solidBrush);//输出文字graphics.RotateTransform(REAL(-(rAngle + 90))); // 还原 graphics.TranslateTransform(-150 * qCos(a), -150 * qSin(a));}
}

在这里插入图片描述

使用路径变换方法

①.概述

先获取路径中的点信息,然后变换点的坐标后创建新的路径,用新的路径绘制文本。

②.代码示例

void DemoGDI::DrawUser(HDC hdc)
{Graphics graphics(hdc);//构造 Graphics 对象SolidBrush solidBrush(Color::Blue);PointF cp(200,200);Pen m_pen(Color::Black);graphics.DrawEllipse(&m_pen, 50, 50, 300, 300);//圆周graphics.TranslateTransform(cp.X, cp.Y); //平移坐标原点GraphicsPath path; //定义路径对象 path.AddString(L"GDI+弧形文字绘制示例", -1,&FontFamily(L"黑体"), FontStyleRegular, 25, Point(0, 0), NULL);RectF boundRect;path.GetBounds(&boundRect);//获取外接矩形 Matrix M; //定义单位矩阵M.Translate(-(boundRect.X + boundRect.Width / 2),-( boundRect.Y + boundRect.Height));//平移原点到路径的底部中心 path.Transform(&M); //更改路径的中心点 int n = path.GetPointCount(); // 获取路径中的点数 PointF *points = new PointF[n]; // 动态创建点数组 path.GetPathPoints(points, n); // 获取路径的点数组BYTE *types = new BYTE[n]; // 动态创建类型数组 path.GetPathTypes(types, n); // 获取路径类型数组for (int i = 0; i < n; i++) //根据路径点到中心的距离,按比例修改点的 y 值 {points[i].Y -= sqrt(150*150 - points[i].X*points[i].X);  }GraphicsPath newPath(points, types, n); //用新的路径点构造新路径graphics.FillPath(&SolidBrush(Color::Green), &newPath);//填充路径}

在这里插入图片描述

在这里插入图片描述

这篇关于GDI+ 中绘制弧形文字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/339013

相关文章

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

Winfrom中解决图像、文字模糊的方法

1.添加清单 2.将清单中的下面内容取消注释