- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果我使用 TextRenderer.DrawText()
并使用 OnPaintBackground
中提供的 Graphics
对象,我的文本看起来很完美。如果我创建自己的 Bitmap
并使用从我的 Bitmap
获得的 Graphics
对象,我的文本看起来很糟糕。看起来它是使用黑色而不是位图的背景颜色来消除文本锯齿。如果我使用 Graphics.DrawString()
,我可以避免这个问题,但这种方法有可怕的字距调整问题。我应该怎么办?如何使用位图的内容使 TextRenderer.DrawText()
正确消除锯齿?
看起来很糟糕:
Bitmap bmp = new Bitmap(100, 100, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.Red);
TextFormatFlags tf = TextFormatFlags.Left;
TextRenderer.DrawText(g, @"C:\Development\Testing\blag", font, clip, Color.White,
Color.Transparent, tf);
}
看起来不错,但我想将它渲染到位图上,而不是控件的表面:
protected override void OnPaintBackground(PaintEventArgs e)
{
e.Graphics.Clear(Color.Red);
TextFormatFlags tf = TextFormatFlags.Left;
TextRenderer.DrawText(e.Graphics, @"C:\Development\Testing\blag", font, clip,
Color.White, Color.Transparent, tf);
}
有什么区别?
最佳答案
答案是不使用 TextRenderer
。 TextRenderer 是文本呈现的 GDI(而非 GDI+)实现的包装器,它具有许多功能,但正如您所发现的那样,不能与内存中的 DC 很好地互操作。
使用 Graphics.DrawString
和 Graphics.MeasureString
,但记得将它传递给 StringFormat.GenericTypographic 以获得准确的尺寸和定位。
最初引入 TextRenderer 的原因是 GDI+ 不支持 GDI 的 Uniscribe 引擎支持的所有复杂脚本。然而,随着时间的推移,GDI+ 对复杂脚本的支持得到了扩展,现在已经没有任何充分的理由使用 TextRenderer(它甚至不再是两者中更快的了,事实上它看起来恰恰相反)。
不过,实际上,除非您遇到严重的、可衡量的性能问题,否则请使用 Graphics.DrawString
。
关于c# - 位图中的 TextRenderer.DrawText 与 OnPaintBackground,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/849531/
我一直在研究自定义控件,但我遇到了一个问题,TextRenderer 的表现有点出乎意料。在我的 OnPaint 事件中,我将转换应用于 Graphics 对象以补偿滚动位置,如下所示: e.Grap
我正在尝试使用 TextRenderer 类测量给定特定字体的字符串的大小。尽管我尝试用 3 种不同的方法(Graphics.MeasureCharacterRanges、Graphics.Measu
我在绘制自定义控件时使用缩放和转换我的图形对象,以便应用缩放和滚动。我使用以下内容: Matrix mx = new Matrix(); mx.Scal
嗨,我正在使用 TextRenderer.MeasureText() 方法来测量给定字体的文本宽度。我使用 Arial Unicode MS 字体来测量宽度,这是一种包含所有语言字符的 Unicode
调用 TextRenderer.MeasureText 如下: TextRenderer.MeasureText(myControl.Text, myControl.Font); 并将结果与控件的
我有一个长字符串(约 10 万个字符)。我需要知道这个字符串的长度。我叫 Size s = TextRenderer.MeasureText(graphics, text, font); 但它返回宽度
由于在我的应用程序的某些地方缺少 Graphics 对象,我决定使用 TextRenderer 类。令人惊讶的是,它为测量文本增加了很多边距。例如: private void button1_Clic
我已经使用 TextRenderer 来测量字符串的长度,因此可以适本地调整控件的大小。 WPF 中是否有等效项,或者我可以简单地使用 TextRendered.MeasureString? 最佳答案
我正在尝试使用 TextRenderer(因为这有利于使用 Graphics.DrawString)将一些文本绘制到 Bitmap,但是它正在产生一些非常不良的影响。 示例代码 using (Bitm
System.Windows.Forms.TextRenderer.DrawText 方法呈现带或不带左右填充的格式化文本,具体取决于 flags 参数的值: TextFormatFlags.NoPa
我试图在我的 TextBox 子类中绘制 80 个字符的边距。这是我的代码: class FooTextBox : TextBox { ... void UpdateMarginPos
CE(.net 精简版)是否支持 TextRenderer? 最佳答案 没有。使用 Graphics.DrawString相反。 TextRenderer 是 GDI+ 缺陷的解决方法,CF 不使用
我想在给定一定宽度的可用 Canvas 的情况下测量文本的高度。我传递的文本很长,我知道会换行。为此,我调用以下方法: using System.Windows.Forms; ... string t
如果我给 TextRenderer.MeasureText 一些要测量的文本和要使用的宽度,它将返回显示该文本所需的高度。 private static int CalculateHeight(str
我使用以下代码在位图上绘制文本 GraphicsPath pth = new GraphicsPath(); var style = (int)myfont.Style; pth.AddString(
正如我发布的 here ,我能够在我的 WindowsForm 上显示一些特殊字体但是我无法将这种字体保存为图片。问题是 Graphic.DrawString() 无法显示所有或特殊字体。 Windo
我对这两种方法感到困惑。 我的理解是 Graphics.DrawString() 使用 GDI+ 并且是基于图形的实现,而 TextRenderer.DrawString() 使用 GDI 并允许大范
因为我已经尝试使用 Graphics.DrawString() 的平滑和渲染的每种组合来绘制字符串,所以我认为文本渲染器会更好地绘制我的字符串,但我认为是错误的. 它应该是这样的: 这是它的样子: 这
如果我使用 TextRenderer.DrawText() 并使用 OnPaintBackground 中提供的 Graphics 对象,我的文本看起来很完美。如果我创建自己的 Bitmap 并使用从
public static void DrawText(IDeviceContext dc, string text, Font font, Point pt, Color foreColor, Te
我是一名优秀的程序员,十分优秀!