常规字体绘制API调用:

QT:QPainter::drawText

D2D: ID2D1RenderTarget::DrawText

以上字体绘制某些特殊效果无法达到, 我们可以用Path绘制字体:

QPainterPath::addText(qreal x, qreal y, const QFont &f, const QString &text);

D2D:

将字用指定字体属性绘制好,获取他的TextGeometry,然后操作这个Geometry(等价于QT的QPainterPath)

m_pTextRender->StartDraw(CD2DHelp::Factory(), rect);
    hr = ptrTextLyout->Draw(0, m_pTextRender, 0, 0);
    if (hr != S_OK)
        return false;
    m_ptrGeo = m_pTextRender->TextGeometry();

但是以上得到的Path如何移动到和drawtext的本体重合, 不仅仅要计算字体宽高还要计算一个重要的值baseline, 因为字体绘制的时候有各种间距,样式,也就是上下左右对齐,所产生的字的位置是不一样的.先放解决方法:

QT:

QFontMetrics metrics(f);
    int py = (layoutRect.Height() - metrics.height()) / 2 + metrics.ascent();

D2D:

DWRITE_LINE_METRICS baseLineMetrics;
    unsigned int actualLineCount = 2;
    ptrTextLyout->GetLineMetrics(&baseLineMetrics, 100, &actualLineCount);

int py  = baseLineMetrics.baseline;

py就是baseline的位置.微软太坑文档不好找,  qt 官网介绍的非常详细对于baseline, 请看下图红线.

绿色为背景框,空填充的紫色字体为使用path绘制的字体, 如果直接使用整个字体的位置绘制path就是上图效果. 这说明字体上下还存在一定距离,这个距离绞尽脑汁个人是计算不出来的,除非去解析字体文件,  所有QT和D2D 都封装好了baseline的概念,只要绘制的的时候计算一下位置即可, d2d的x位置也会有问题,  各种对齐属性不一样这个位置将不一样,这个要万分注意.

绘制好的结果如下:

关于字体绘制的baseline (QT 和 D2D)相关推荐

  1. OpenGL字体绘制

    /*glfont.hppsdragonx 2019-08-15 00:03:33opengl字体类,提供初学者参考学习opengl初始化之后,创建字体 font.init(L"微软雅黑&qu ...

  2. Graphics.MeasureString用指定的字体绘制时测量指定的字符串

    Graphics的MeasureString方法,只要指定了字体和字符串后,用这个方法就能获得一个矩形的区域,这个区域是Graphics对象用DrawString方法在空间表面绘制字符串时所要的区域. ...

  3. FTT字体绘制,2D阶段

    如果你以前的博文有看,你会看到这里有了很大的不同,一个新的Render2Texture类,可以直接生成一段data写进贴图里. 然后就把这个贴图绘制出来,就是那一堆猛. 关键的流程已打通,至于怎么对字 ...

  4. 泰山OFFICE技术讲座:一个字符,用哪个字体绘制

    上一篇博文讲到字体设置的问题.那么在实际绘制的时候,使用哪个字体呢?这个事情有点复杂,其实也是清楚的.今天在这里特别写明. 如果是英文,使用西文字体 此处的西文字体,意思是用于绘制西文的字体. 如果给 ...

  5. qt跟随鼠标动态绘制_采用Qt快速绘制多条曲线(折线),跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)...

    #include "MyTracer.h"XxwTracer::XxwTracer(QCustomPlot*_plot, TracerType _type, QObject *pa ...

  6. wordcloud:利用fontawesome字体绘制图标词云图

    根据文本生成词云的操作很常见,在某些场景下,我们可以遇到图标也按照某种形状排列的情况,那么可以用生成词云图的方法生成这样的图标词云图吗? 如何应用fontawesome字体 当前最常见的图标字体就是w ...

  7. 【Qt】2D绘图之绘制文字

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 基本绘制 04. 使用范围绘制文字 05. 使用字体绘制文字 06. 附录 01. 概述 Qt中除了绘制图形以外,还可以使 ...

  8. Android 绘制录音波浪 + 拓展: 让“字体”迎波而浪

    效果图:         1.绘制录音曲线效果 公式和网站介绍 我们要绘制这种效果,最直观方便的方式就是采用三角函数的cos/sin的函数,首先我们需要一个重要的网站: Desmos: https:/ ...

  9. Qt:QtCharts绘制图表实时采集温度

    目录 Qt Charts介绍 视图-QChartView 图表-QChart 系列-QAbstractSeries 坐标轴-QAbstractAxis 图例-Legend 创建GUI界面 界面布局 完 ...

最新文章

  1. C#中用ILMerge将所有引用的DLL和exe文件打成一个exe文件
  2. 初涉网络流 POJ 1459 Power Network
  3. 2018-2019-1 《信息安全系统设计基础》 20165235 实验五 通信协议设计
  4. Spring ClassPathXmlApplicationContext
  5. 【C语言进阶深度学习记录】十八 条件编译的使用与分析
  6. autocad完全应用指南_如何提高CAD画图的速度?有哪些途径和技法?【AutoCAD教程】...
  7. 一文解锁加密算法的秘密
  8. 使用Julia进行图像处理--JuliaImages介绍与基础使用
  9. 微信小程序开发实战——模块化
  10. 数据窗口dw导出多种格式文件
  11. 机器学习老中医:利用学习曲线诊断模型的偏差和方差
  12. java 两集合根据某字段 过滤掉相同的数据 , 集合整合数据
  13. HTML5权威指南观后笔记
  14. 普林斯顿大学计算机排名,普林斯顿大学计算机科学与工程世界排名2020年最新排名第12(ARWU世界排名)...
  15. Win11 更新完检测不到音频设备
  16. 迅雷一直提示“正在开始”“正在停止”的解决方案
  17. 解读敏捷需求分析五大关键因素
  18. 造车新势力“蔚小理”变弱了?不,他们已走过幼年期
  19. 2022高教社杯数学建模国赛C题思路代码实现
  20. 毕设 深度学习中文汉字识别

热门文章

  1. 如何网络推广快,怎么快速推广网站
  2. 联想小新pro16和联想小新pro14 2022款哪个好
  3. 时空大数据解决方案-最新全套文件
  4. 无人值守系统安装--自己的系统实用篇
  5. 深度学习经典试题29道
  6. 名帖13 邓石如 篆书《白氏草堂记》六条屏
  7. mac svn 服务器及客户端
  8. 【GTASA】Sanny Builder 不能编译 main.scm,报错 “Incorrect number of the conditions“
  9. 联想M490 开机U盘启动 快捷键
  10. [转贴]COM Interop 注册相关