探究WPF中文字模糊的问题:TextOptions的用法

这篇具有很好参考价值的文章主要介绍了探究WPF中文字模糊的问题:TextOptions的用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有网友问WPF中一些文字模糊是什么问题。之前我也没有认真思考过这个问题,只是大概知道和WPF的像素对齐(pixel snapping)、抗锯齿(anti-aliasing)有关,通过设置附加属性TextOptions.TextFormattingMode或者TextOptions.TextRenderingMode来解决。这次我也查了下资料,了解了这几个附加属性的取值范围以及用法。

像素对齐和抗锯齿

我们经常听到WPF具有分辨率无关性这个说法,因为WPF使用的是与设备无关的绘图系统,为字体和形状等内容指定大小或者尺寸的数值并不是真实的像素,在WPF中称之为设备无关单位。渲染过程中,WPF会自动把设备无关单位转换为物理像素,由于设备的差异以及DPI设置不同,转换之后的像素很少是整数,然而无法使用零点几个像素点去绘制,WPF会使用抗锯齿特性进行补偿。

例如绘制一条62.4992个像素长的红线时,WPF会正常填充前62个像素,然后使用直线颜色(红色)和背景色之间的颜色为第63个像素着色,但这个补偿也会带来新的问题,在绘制直线、矩形或者具有直角的多边形时,抗锯齿特性导致形状边缘出现一片模糊的区域。在实际应用中的体现就是前边说的文字模糊,奇数单位宽度的直线两侧有很细的淡色边缘,如果直线宽度只有1个设备无关单位,肉眼看到的线条颜色会比实际指定的颜色要浅一点。

TextOptions的使用

TextOptions定义一组影响文本在元素中的显示方式的附加属性。总共包含三个附加属性:TextFormattingModeTextHintingModeTextRenderingMode。这三个附加属性类型都是与属性同名的枚举类型。

TextFormattingMode附加属性

TextFormattingMode附加属性用于切换WPF在格式化文本时使用的文本度量。取值范围如下:

枚举名 说明
Ideal 0 指示 TextFormatter 使用理想的字体规格布局文本。
Display 1 指示 TextFormatter 使用 GDI 兼容字体规格布局文本。

官方文档上的这个描述看起来似乎很直观,但并不容易理解它俩的区别以及开发过程中选取哪一个值。

  • Ideal:自推出WPF以来一直用于格式化文本的度量。绘制的字体形状与字体文件中的轮廓保持高保真。创建字形位图或者字形与字形之间的相对定位时,不会考虑最终位置。
  • Display:WPF4.0中引入的新的格式化文本的度量模式。它使用GDI兼容的文本度量。该模式下每个字形的宽度都是整数个像素,字形的大小和换行与基于GDI的框架相似(比如WinForm)。这也就意味着字形的大小和换行不完全准确。

两种模式都有各自的优势和缺点,Ideal模式可以提供最佳的字形和间距,减少用户阅读疲劳,但是在较小的字体情况下,文字渲染会模糊。Display模式则是牺牲字体形状和间距为代价,提供像素对齐的清晰的文字。
大多数情况下,两种模式渲染的文字效果差异很小,Display模式主要是解决较小字体情况下文字模糊的问题。Ideal模式在大于15pt的字体情况下,和Display模式渲染的文字一样清晰,且具有更好的字形和间距。此外以下三种情况也应选择Ideal模式。

  • 变换文本:Display模式只有在字形绘制在完整的像素上时才有清晰的效果,对文本进行变换时,Display模式的像素对齐存在偏差,因为该模式的优化是在所有变换之前应用的,应用变换后将不再对齐到像素边界,从而导致文字模糊。而Ideal模式在任何地方绘制文字都具有同样的渲染效果。
  • 缩放文本:缩放其实也是变换的一种形式,但相比其他的2D变换,Display模式在缩放文本时渲染的效果更差,主要是因为该模式下的文本度量不会随着缩放倍数线性变化,为了保持缩放的准确性,Display模式是对原始尺寸文字的位图进行缩放,这导致在任何明显尺度变化时产生模糊和伪影。
  • 字形高保真:对字形有非常高的要求时,Ideal模式具有更好的效果,这也是Ideal模式的主要优势之一。

TextRenderingMode附加属性

TextRenderingMode附加属性用于控制渲染文字时使用的抗锯齿算法。取值范围如下:

枚举名 说明
Auto 0 根据用于设置文本格式的布局模式,使用最合适的呈现算法呈现文本。除非操作系统已经被设置为在本机禁用ClearType,该模式将使用ClearType。
Aliased 1 使用双层抗锯齿功能呈现文本。(有的地方说不使用抗锯齿算法)
Grayscale 2 使用灰度抗锯齿功能呈现文本。
ClearType 3 使用最合适的ClearType呈现算法呈现文本。

通常情况,不需要对该属性进行设置,除非操作系统已经设置在本机禁用ClearType,默认是会使用ClearType呈现算法呈现文本。在液晶显示器环境,ClearType技术增强了文本的清晰度和可读性。

ClearType使用亚像素呈现技术,通过将字符对齐到像素的小数部分,以更高的保真度显示文本的真实形状。超高的分辨率增加了文本显示中细节的清晰度,使其更便于长时间阅读。WPF中ClearType可以朝Y轴方向抗锯齿,使文本字符中平缓曲线的顶端和底端变得平滑。

TextHintingMode附加属性

TextHintingMode附加属性用于设置静态文本或动态文本的呈现行为。取值范围如下:

枚举名 说明
Auto 0 自动确定是否使用适用于动画文本或静态文本的质量设置来绘制文本。
Fixed 1 以最高静态质量呈现文本。
Animated 2 以最高动画质量呈现文本。

Fixed模式使用的算法针对视觉上精确的字体平滑效果进行优化,但是将动画应用于字体元素的属性时,可能导致性能问题以及抖动,尤其是对于 转换和投影。Animated模式通过使用一个更高效、但视觉精确下降的平滑算法来针对动画进行优化。

参考

https://devblogs.microsoft.com/visualstudio/wpf-text-clarity-improvements/

https://learn.microsoft.com/en-us/archive/blogs/text/additional-wpf-text-clarity-improvements

https://learn.microsoft.com/en-us/archive/blogs/text/wpf-4-0-text-stack-improvements文章来源地址https://www.toymoban.com/news/detail-839002.html

到了这里,关于探究WPF中文字模糊的问题:TextOptions的用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • redis中数据模糊查找-scan用法

    Redis中有一个经典的问题,在巨大的数据量的情况下,做类似于查找符合某种规则的Key的信息,这里就有两种方式, 一是keys命令,简单粗暴,由于Redis单线程这一特性,keys命令是以阻塞的方式执行的,keys是以遍历的方式实现的复杂度是 O(n),Redis库中的key越多,查找实现代

    2024年02月09日
    浏览(31)
  • 详解Unity中Time类的用法与深入探究

    在游戏世界中,时间无疑是最为重要的参数,它是游戏世界能否正常运转的关键。一旦它出错,轻则卡顿,重则游戏世界崩坏。在使用Unity引擎创造的世界中,Time类无疑是必须要掌握的一个类,它是控制时间的关键,是造物主最为重要的权柄,有了它,我们就可以肆意的玩弄

    2024年02月08日
    浏览(59)
  • elasticSearch7版本文档中文属性模糊查询不准确

    1、问题:es文档中的某个属性值name的值如下所示 name\\\":\\\"catalog=Catalog(value=699015935012372480, displayName=/默认分组), status=3, updaterName=admin, updateTime=2023-02-01 14:33:17)status:已发布” 通过java模糊查询的api(QueryBuilders.fuzzyQuery)查询name为“已”的时候可以查询,查询为“已发布”的时候查

    2024年02月02日
    浏览(51)
  • 《FFmpeg Basics》中文版-08-模糊,锐化和其他去噪

    包含各种噪声的视频输入可以使用去噪滤波器和选项来增强。 在视频编码之前,去噪是视频预处理的一部分。 模糊效果用于提高图像(视频帧)中某些类型的噪声的质量,其中每个输出像素值是根据相邻像素值计算的。 例如,模糊效果可以改善从印刷的半色调图片扫描的图

    2024年02月02日
    浏览(28)
  • SQL Server 数据表模糊查询(like 用法)以及查询函数

    在SQL Server Management Studio (SSMS) 中,进行模糊查询主要是通过使用 like 操作符来实现的。 like 操作符用于在 where 语句中搜索列中具有指定模式的数据。 我们在简单例子中来了解: % 通配符:表示任意数量的字符。 这个例子会选择 column_name 列中包含\\\"pattern\\\"这个词的所有记录,就

    2024年01月22日
    浏览(74)
  • 使用SQL中的LIKE操作符进行模糊匹配:原理与用法

    LIKE操作符的基本原理: LIKE操作符用于在SELECT语句中进行模糊匹配,通常与通配符%一起使用。%表示匹配任意长度的任意字符,例如\\\'%apple%\\\'可以匹配包含\\\'apple\\\'字符串的任意位置的字符串。而其他的通配符如下: _ 表示匹配一个任意字符 [ ] 表示匹配一个指定范围内的任意字符

    2024年02月05日
    浏览(46)
  • 【云原生|探索 Kubernetes 系列 8】探究 Pod 的 API 对象属性级别与重要字段用法

    大家好,我是秋意零。 本专栏上一篇中,我们介绍了 Pod 的核心思想以及 Pod 的工作原理。今天我们还是探讨 Pod ,聊一聊 Pod 的基本概念。 👿 简介 🏠 个人主页 : 秋意零 🧑 个人介绍 :在校期间参与众多云计算相关比赛,如:🌟 “省赛”、“国赛” ,并斩获多项奖项荣

    2024年02月07日
    浏览(39)
  • 【探索 Kubernetes|作业管理篇 系列 8】探究 Pod 的 API 对象属性级别与重要字段用法

    大家好,我是秋意零。 本专栏上一篇中,我们介绍了 Pod 的核心思想以及 Pod 的工作原理。今天我们还是探讨 Pod ,聊一聊 Pod 的基本概念。 👿 简介 🏠 个人主页 : 秋意零 🧑 个人介绍 :在校期间参与众多云计算相关比赛,如:🌟 “省赛”、“国赛” ,并斩获多项奖项荣

    2024年02月08日
    浏览(47)
  • 【WPF应用35】深度解析WPF中的TreeView控件:功能、用法、特性与最佳实践

    WPF(Windows Presentation Foundation)是微软推出的一个用于构建桌面应用程序的图形子系统。在WPF中,TreeView是一种常用的树形控件,用于显示层次结构的数据显示。本文将详细介绍WPF中的TreeView控件,并提供一个简单的示例。 TreeView控件用于显示一个层次结构的列表,通常用于显

    2024年04月10日
    浏览(78)
  • 界面控件DevExpress WPF中文入门级教程 - 格式化值

    DevExpress WPF v21.2高速下载 格式化值概述 大多数DevExpress WPF控件都接受数据输入,并尽可能为您的最终用户提供键盘驱动的数据输入 - 以及灵活的数据表示格式。 轻松应用数字或日期时间格式来编辑值,以提高 WPF 应用程序的可用性。 您可以使用标准或自定义格式说明符、复合

    2024年02月04日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包