- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
由于在我的应用程序的某些地方缺少 Graphics 对象,我决定使用 TextRenderer 类。令人惊讶的是,它为测量文本增加了很多边距。例如:
private void button1_Click(object sender, EventArgs e) {
using (var g = this.CreateGraphics()) {
Font font = new Font("Calibri", 20.0f, GraphicsUnit.Pixel);
Size size = TextRenderer.MeasureText("Ala ma kota", font);
g.DrawRectangle(Pens.Red, new Rectangle(new Point(10, 10), size));
TextRenderer.DrawText(g, "Ala ma kota", font, new Point(10, 10), Color.Black);
}
}
给出以下结果:
为什么会这样?有没有办法强制它获得真实的文字大小? (当然,在它返回的同一个矩形中绘制它)
最佳答案
来自 MSDN :
For example, the default behavior of the
TextRenderer
is to add padding to the bounding rectangle of the drawn text to accommodate overhanging glyphs. If you need to draw a line of text without these extra spaces, use the versions ofDrawText
andMeasureText
that take aSize
andTextFormatFlags
parameter, as shown in the example.
您还必须传递 Graphics
对象以获得正确的结果,因为:
This overload of
MeasureText(String, Font, Size, TextFormatFlags)
will ignore aTextFormatFlags
value ofNoPadding
orLeftAndRightPadding
. If you are specifying a padding value other than the default, you should use the overload ofMeasureText(IDeviceContext, String, Font, Size, TextFormatFlags)
that takes aIDeviceContext
object.
Size size = TextRenderer.MeasureText(g,
"Ala ma kota",
font,
new Size(int.MaxValue, int.MaxValue),
TextFormatFlags.NoPadding);
TextRenderer.DrawText(g, "Ala ma kota", font,
new Point(10, 10),
Color.Black,
TextFormatFlags.NoPadding);
g.DrawRectangle(Pens.Red, new Rectangle(new Point(10, 10), size));
另请查看直接使用 Graphics
方法:GDI+ MeasureString() is incorrectly trimming text
关于c# - 为什么 TextRenderer 在测量文本时添加边距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22955612/
我一直在研究自定义控件,但我遇到了一个问题,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
我是一名优秀的程序员,十分优秀!