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

相关文章

高效录音转文字: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.将清单中的下面内容取消注释

【生日视频制作】酒吧一群美女车展模特大屏幕视频改字AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程酒吧一群美女车展模特大屏幕视频改字AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】酒吧一群美女车展模特大屏幕视频改字AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安装AE软件 下载AE模板 把AE模板导入AE软件 修改图片或文字 渲染出视频

ORA-01861:文字与格式字符串不匹配

select t.*, t.rowid from log_jk_dtl t; insert into log_jk_dtl (rq,zy,kssj,jssj,memo)  values (to_date(sysdate,'yyyy-mm-dd'),'插入供应商', to_char(sysdate,'hh24:mi:ss'),to_char(sysdate,'hh24:mi:ss'),'备注'

使用matplotlib绘制散点图、柱状图和饼状图-学习篇

一、散点图 Python代码如下: num_points = 100x = np.random.rand(num_points) #x点位随机y = np.random.rand(num_points) #y点位随机colors = np.random.rand(num_points) #颜色随机sizes = 1000 * np.random.rand(num_points) # 大

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑