gpt4 book ai didi

c# DrawString - 测量每个字符的边界框

转载 作者:太空狗 更新时间:2023-10-29 18:31:54 24 4
gpt4 key购买 nike

在我将一个字符串传递给 Graphics.DrawString() 之前,我想知道每个字符的确切位置 - 不仅仅是它的偏移量和宽度,还有它的带有上升/下降的精确边界框,以便我可以在字符级别进行碰撞检测,而不是使用 Graphics.MeasureString() 给我的整个行高。

我似乎找不到任何准确返回每个字符边界框的示例。这如何在 c#/GDI+ 中完成?

理想情况下,我希望获得此图像中的每个灰色矩形:

enter image description here

最佳答案

我认为在 GDI+ 中准确测量字符串中的字符是不可能的。即使您忘记了子像素定位和字距调整等,这意味着绘制的字符串中的字符将根据字符串中的上下文和屏幕上的位置以及 ClearType 设置而具有不同的大小,MeasureString 有添加填充和模糊因素的习惯,因此您无法轻易地从中获取所需的信息。

一种可行的方法是测量第一个字符,然后是前两个字符,然后是前三个字符,依此类推,这样您就可以大致了解一次绘制时它们将全部结束的位置.然后您可能需要再次测量每个字符以确定其高度。如果 MeasureString 不提供字符高度而是提供字体高度,您可能不得不将每个字符呈现为屏幕外位图,然后扫描像素以确定字符的真实高度。

到那时,您可能会发现 p/调用较低级别的字体 API 会更好,该 API 可以直接从字体中为您提供所需的信息。但是随后您可能需要使用 GDO+ 以外的其他东西来渲染它,因为它与您计算出的结果一致的可能性可能不大。

(你能告诉我我对 GDI+ 字体渲染器的质量有信任问题吗?)

关于c# DrawString - 测量每个字符的边界框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18497792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com