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

article/2025/9/26 19:21:04

常规字体绘制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位置也会有问题,  各种对齐属性不一样这个位置将不一样,这个要万分注意.

绘制好的结果如下:


http://chatgpt.dhexx.cn/article/nk5q4915.shtml

相关文章

DirectX12(D3D12)基础教程(十三)——D2D、DWrite On D3D12与文字输出

文章目录 1、 前言2、D2D、DWrite简介3、添加D2D、DWrite基础支持文件4、D2D、DWrite基本编程步骤5、基于D3D11On12设备创建D2D渲染目标6、创建DWrite字体用D2D显示文字7、D2D、D3D11on12与D3D12同步 1、 前言 在经过了前面一系列章节的“狂轰滥炸”式的学习之后,如…

D2D

D2D: Device-to-Device即是设备到设备的通信。 1.认识D2D 基于蜂窝网络的D2D通信,或称为邻近服务(Proximity Service,ProSe),是指用户数据可不会经过网络中转直接在终端之间传输。D2D通信与传统的通信架构有显著区别&#xff0c…

D2D与蜂窝系统间的干扰

上行频段:D2D发射端UE3对基站的干扰,蜂窝UE1对D2D接收端UE4的干扰;下行频段:基站对D2D接收端UE4的干扰,D2D发射端UE3对蜂窝UE2的干扰。 D2D复用上行资源:eNB会受到D2D的干扰,D2D中的UE都受eNB的控制,eNB为其分配资源,同时也控制最大发射功率,而且还能够将蜂窝的功控信息…

关于D2D

前段时间发现微软的DirectX是如此的强悍,并且对于开发windows程序是如此的重要,决定到msdn去看看,下面是对D2D的介绍,后面会陆续贴上,这是我的第一篇译文,有误之处,还请指教。 什么是D2D? D2D…

移动通信网络规划:D2D通信技术

D2D通信技术 一、什么是D2D通信技术 D2D即Device-to-Device,也称之为终端直通。D2D通信技术是指两个对等的用户节点之间直接进行通信的一种通信方式。 如图中所示。在由D2D通信用户组成的分散式网络中,每个用户节点都能发送和接收信号,并具有…

D2D网络架构介绍

D2D(Device-to-Device)通信,也称为邻近服务(Proximity Service,ProSe),是由3GPP组织提出的一种点到点的无线通信技术,它可以在蜂窝通信系统的控制下允许LTE终端之间利用小区无线资源直接进行通信,而不经过蜂窝网络中转。作为面向5G的关键候选技术,D2D技术能够提升通信…

车载通信与导航(七):D2D通信详解

D2D(设备到设备),即临近终端设备之间直接进行通信的技术,在通信网络中,一旦D2D通信链路建立起来,传输语音或数据消息就无需基站的干预,这样就可以减轻通信系统中基站及核心网络的数据压力&#…

C中strchr()函数用法

strchr()函数包含于头文件&#xff1a;#include<stdio.h>中&#xff1b; 函数原型为&#xff1a;char * strchr(char * str, char/int c); 函数功能为&#xff1a;在字符串str中寻找字符C第一次出现的位置&#xff0c;并返回其位置&#xff08;地址指针&#xff09;&am…

php strchr 截断,PHP strchr() 函数

w3school 教程 PHP String 函数 查找 "world" 在 "Hello world!" 中的第一次超并返回此字符串的其余个别&#xff1a; echo strchr("Hello world!","world"); ?> 运行实例 strchr() 函数搜他串在另一字符串中的第一次常 该函数是 …

php strchr 截断,php 常用字符串函数 - strchr

...转义的字符串 三、检索字符串函数/strstr()函数和strchr()函数$str "abc123.com"; $tem strchr($str,""); $tep strstr($str, ""); $ten 以下列出开发中常用的字符串函数&#xff0c;以供自己需要的时候查阅 长度 strlen($string):得到字符…

strchr的用法

strchr&#xff08;char *s,char *c&#xff09; 查找字符c第一次出现在字符串s中的位置 返回值&#xff1a;如果找到指定的字符则返回该字符所在地址&#xff1b;否则返回NULL. 例1&#xff1a; #include <cstring> #include <cstdio> int main() {char sstri…

php strchr和strrchr,strrchr与Strchr

strrchr 取得某字符最后出现处起的字符串。 语法: string strrchr(string haystack, string needle); 返回值: 整数 函数种类: 资料处理 内容说明 本函数用来寻找字符串 haystack 中的字符 needle 最后出现位置&#xff0c;并将此位置起至字符串 haystack 结束之间的字符串返回…

php strchr 截断,php字符串处理函数详解 - strchr

...substr($add,0,strlen($add)-1); }if($word>){ $flag1; } }if(strchr($add,$keytop)){ $found1; }if(strchr($add,$keybottom)){ $found0; $end1; }if(((strchr($add, PHP处理字符串的能力非常强大,方法也是多种多样,但有的时候你需要选择一种最简单且理想的解决方法,文章…

ipv6环境搭建

2018年4月30日 iOS上架必须适配ipv6的网络&#xff0c;我也因为这个原因被拒了。为适配ipv6&#xff0c;就必须创建一个ipv6环境&#xff0c;本文介绍了使用Mac搭建ipv6环境的2种方法。 根据有、无网线&#xff0c;可分为2种场景来搭建。 有线网情况下创建ipv6环境 目标 通过…

搭建一个简单的SDN网络环境

第1小题&#xff1a;简单网络 说明&#xff1a;由于对于SDN架构的理解在学界和业界并没有统一&#xff0c;为了方便参赛队员选择&#xff0c;对于初学者&#xff0c;大赛推荐OpenFlow作为南向接口来实现SDN环境&#xff0c;以下给出分别针对采用OpenFlow和采用其他接口的具体要…

Hyperledger Fabric网络环境手动配置及其链码自动化部署

目录 5.1 网络环境的搭建 5.1.1 生成组织结构与身份证书 5.1.2 生成创世区块和通道 5.1.3 启动Fabric网络 5.1.4 创建Fabric-SDK-GO对象并建立通道 5.1.5 Fabric-SDK-Go实现链码的自动部署 5.2 链码实现 5.1 网络环境的搭建 5.1.1 生成组织结构与身份证书 Hyperledger Fabric…

Linux 实用指令 -- 网络配置(查看网络IP和网关、 ping 测试主机之间网络连通、Linux网络环境配置(指定固定ip))

文章目录 1. 网络配置1.1 查看网络IP和网关1.1.1 查看虚拟网络编辑器1.1.2 这里可以修改ip地址&#xff08;修改虚拟网络的ip&#xff09;1.1.3 这里可以修改网关&#xff08;虚拟网络的网关&#xff09;1.1.4 查看windows环境的中VMnet8网络配置 1.2 ping 测试主机之间网络连通…

Linux系统配置网络环境的图文教程(完整版)

Linux系统配置网络环境步骤 1、网络配置查看 记住NAT设置中的子网IP、子网掩码、网关IP三项&#xff0c;接下来配置文件主要是这三项。 2、编辑Linux中的网络配置文件 命令&#xff1a;vi /etc/sysconfig/network-scripts/ifcfg-ens33 #注 网络配置文件名可能会有不同&#…

2022电工杯:5G 网络环境下应急物资配送问题(优化)

题目 问题一 图一&#xff1a; 附件一&#xff1a; 要求&#xff1a; 问题二 图二&#xff1a; 要求&#xff1a;&#xff08;基于第一问增加了飞机&#xff09; 问题三 附件二&#xff1a; 应该就说修改一下第二问范围&#xff1a; 问题四 图三&#xff1a; …

tiktok手机网络环境怎么设置?tiktok怎么破播放量?

tk很多没有播放的原因&#xff0c;有一部分是来源于手机&#xff0c;残留着国内的使用痕迹&#xff0c;不要插卡&#xff0c;使用一部闲置的手机来做调试&#xff0c;手机不是很卡&#xff0c;能刷视频就可以&#xff0c;常见的水果机比较好用&#xff0c;以下就是手机设置的一…