问题标签 [textrenderer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - .Net Winforms 中的 Graphics.DrawString 和 TextRenderingHint 可能存在错误
这是一个控件的 OnPaint 方法,它简单地从控件继承并提供一个属性来获取/设置 textrenderinghint:
现在,如果您将其中两个放置在表单上,将第一个保留为默认值并将第二个更改为 AntiAlias,它在设计时看起来不错,但是当您运行应用程序时,第一个标签的呈现模式已更改。就好像 DrawString 方法改变了系统默认值一样。
这里有一些观察:
(1) 如果我明确地将第一个控件的模式设置为 ClearTypeGridFit,这与我的默认设置相同,它可以解决问题。
(2) 如果您在窗体上放置第三个控件并保留默认模式,则可以解决问题。
(3) TextRenderer.DrawText 没有复制问题。
(4) 如果我继承标签控件并重写 onpaint 方法来设置渲染模式,即使我设置了 UseCompatibleTextRendering 也不会复制问题 - 这会强制标签使用 DrawString 而不是 DrawText 渲染。
我在 XP 上启用了 cleartype 并使用了 Visual Studio 2008 Express Edition。
ETA:我在 C# 中尝试过,同样的事情发生了
.net - Calculate Windows Form Width for Displayed Text
I need to calculate Windows Form Width for displayed text. The form width is obviously in pixels so you would just want to obtain the width of the text in pixels but this doesn't work:
The calculated form width is way too small (cuts off text) - what is going on here? MeasureText uses pixels, form width is in pixels.
This works better but I don't think is right:
Help would be appreciated.
AnimationPic - PictureBox, Caption is set on a Label
Image in the designer:
graphics - TextRenderer.DrawText 使用 GDI 渲染 OTF 字体?
我试图在位图图像上绘制文本,我做了一些研究,发现 .NET/GDI+ 不支持 OTF 字体。我在某处读到了可以使用TextRenderer.DrawText
GDI 渲染 OTF 字体的文章,但我似乎无法弄清楚如何使用,质量也无法与之相比Graphics.DrawString
。
首先,是否可以在 VS 中使用 OTF 字体或者我读错了什么?
第二,如果答案是TextRenderer.DrawText,我该如何使用OTF字体?看起来我必须使用
System.Drawing.Font
该类,但我认为那些不支持字体,这就是问题所在,对吗?如何让字体像使用 GDI+ (
Graphics.DrawString
)的 TTF 字体一样清晰呈现使用
Graphics.DrawString
我能够使用RectangleF
(指定宽度,0 高度)作为我的文本的边界,并且文本正确包装。使用TextRenderer.DrawText
,使用的能力RectangleF
消失了,只允许Rectangle
似乎不允许 0 高度,同时仍然允许显示文本(即文本必须在矩形内,并且文本换行不起作用)。我做错了吗?
任何帮助将不胜感激。如果无法做到这一点,有没有办法转换OTF字体,或者在TTF版本中在线找到Gotham字体系列?我真的需要这些字体!
.net - .Net 中带有 PathEllipsis 的紧凑型长字符串
我有以下字符串,我正在使用 DrawString 在我的一个树视图控件中绘制它。
树视图正在绘制上面的字符串,如下所示:
现在,我想将上图中显示的相同字符串压缩为另一个字符串。我试过http://www.codeproject.com/KB/vb/NewPathCompactPath.aspx
但是,它没有为我提供上面的图像结果。
请告诉我,如何使用TextRenderer.MeasureText
相同的字符串获得相同的结果。
谢谢
.net - TextRenderer.MeasureText 为字符“&”返回 Width=0
一切尽在标题中。我尝试创建自己的 OpenGL 字体系统,并且需要获取要包含在 Sprite 纹理中的每个字符的大小。除了字符“&”(ascii 38)之外,所有的都运行良好且准确。即使我更改了字体,这个字符的宽度也总是返回零。身高不错。
最奇怪的是,如果我尝试测量 "&&" (Chr(38) & Chr(38)) 的串联,结果似乎不错!我还没有检查相同字体产品的另一个范围中的相同代码点是否相同的错误,所以我不知道解决方法“如果 char 是“38”测试“38+38”上的大小是否会总是工作。
编辑:对不起,我太愚蠢了。我完全忘记说我在 VB.Net 下(但可以理解 C#),并且我使用 OpenGL 和 OpenTK 进行绑定。TextRenderer 是 GDi+ 的一个类。我用它来创建我的字体纹理。这真的不是 OpenGL 问题。
vb.net - 使用 DrawText 绘制文本的结尾
TextRenderer.DrawText()
当目标矩形太小时,是否能够绘制文本的结尾?
TextFormatFlags.Bottom
没有帮助我。
换句话说:如何在其顶部边缘剪切文本?
c# - 为什么 TextRenderer.MeasureText 不能正常工作?
在给定一定宽度的可用画布的情况下,我想测量文本的高度。我传入的文本很长,我知道会换行。为此,我称之为:
无论我为画布传递什么,它总是返回 14 size.Height
。
我错过了一些简单的东西吗?
c# - 在 WinForms 应用程序中准确测量、呈现、命中测试和打印文本
我们要:
- 准确测量文本。
- 在存在应用于图形上下文的平移和缩放变换的情况下,将文本逐行渲染到屏幕图形上下文。
- 命中测试:允许使用鼠标或通过显示的插入符号精确选择文本。
- 如果需要,使用打印机尽可能准确地打印结果。注意:这是次要的。屏幕渲染和点击测试是主要的。
- 在 Windows XP 和更高版本的操作系统上运行。
在同样将图形和图像渲染到相同图形上下文的 WinForms 应用程序中。
我们遇到了四种技术。我们已经尝试使用前两个,并在几个月的过程中遇到了所描述的问题。
GDI+
据称与分辨率无关的文本。然而,根据这个问题- 以及其他来源 - 由于质量问题,应避免使用该技术。
MSDN声明调用 Graphics.MeasureString StringFormat.GenericTypographic
并TextRenderingHint.AntiAlias
产生准确的字符串测量。然而,根据我们和其他人的经验,情况并非如此——我们没有得到准确的字符串测量值。
- 优点:快
- 缺点:字符串测量不准确。
结果:由于字符串测量不准确而无法使用。
GDI 通过 TextRenderer
这是为了克服 GDI+ 的限制而引入的。然而,这引入了它自己的限制:
- 非常慢
- 不适用于图形变换
结果:由于这些原因无法使用
GDI 通过 p/invoke
调用GetTextExtentExPoint
文本测量和//DrawText
进行渲染。DrawTextEx
ExtTextOut
我们还没有尝试过。
直写
这看起来很有希望,因为它与包括 GDI/GDI+ 在内的其他技术互操作,所以我们的图形渲染的其余部分可能不会改变。但是,它仅适用于 Windows Vista 和更新的 Windows 版本。这是目前的一个问题,因为 Windows XP 仍然有大量的安装基础。
问题
考虑到要求,哪些技术可以工作?
注意: 关于这个话题有很多错误信息,所以只有在你有这方面的专业知识的情况下才能回答这个问题。另外,请不要建议 WPF - 这不是我们正在考虑使用的东西。
.net - TextRenderer 不绘制长字符串
看看这个样本:
当我将 设置MAX_TEXT
为 5461 时,不绘制字符串。您知道本机机制是否对绘制文本有限制,是否/或我可以设置选项以使其正常工作?
c# - 事件堆栈中 TextRenderer.DrawText 或 Graphics.DrawString 的数量是否有任何限制?
似乎讽刺地适合这个网站,我试图在覆盖表单上的多个位置绘制一堆文本,并在尝试渲染 16 个 DrawText 调用后,表单显示一个红色的十字而不是文本。有没有更好的方法在 Windows 窗体上绘制一堆文本?
aka 我不想学习 WPF 只是为了发现那根本不是要走的路。
(注意:我会在发布后立即回答这个问题,我刚刚找到了问题的解决方案。)