- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用以下代码在位图上绘制文本
GraphicsPath pth = new GraphicsPath();
var style = (int)myfont.Style;
pth.AddString(tcaption.Text, myfont.FontFamily, style, myfont.Size, point, StringFormat.GenericTypographic);
p = new Pen(new SolidBrush(bc), 2f);
mygraphics.DrawPath(p, pth);
我正在使用 TextRenderer
来测量字符串的大小..
int Width = TextRenderer.MeasureText(tcaption.Text, myfont).Width;
但这不会产生正确大小的绘制字符串;与绘制的字符串的实际大小有大约 20-30% 的差异?
我做错了什么?请指教。
更新:
我想在位图上绘制一个文本和一个图像,所以为了兼顾两者,我创建了一个这样的位图
intWidth = TextRenderer.MeasureText(tcaption.Text, cfont).Width + image.Width;
intHeight = TextRenderer.MeasureText(tcaption.Text, cfont).Height +image.Height;
tempimage= new Bitmap(intWidth, intHeight);
然后我像这样从 Bitmap 创建 Graphics 对象
using (Graphics newg = Graphics.FromImage(tempimage))
@汉斯帕桑特
我还尝试了 Graphics.MeasureString
作为 TextRenderer 的替代品
现在我设置文本和图像的位置-我需要在左上角绘制图像..所以
imageposy = 0;
imageposx = 10;
textposy = image.Height;
textposx = 0;
然后我把文字画成这样
po=new Point(textposx, textposy);
newg.SmoothingMode = SmoothingMode.AntiAlias;
GraphicsPath pth = new GraphicsPath();
var style = (int)myfont.Style;
pth.AddString(tcaption.Text, myfont.FontFamily, style, myfont.Size, po,
StringFormat.GenericTypographic);
newg.FillPath(new SolidBrush(fc), pth);
现在我画成这样
Rectangle nrect = new Rectangle(imageposx, imageposy, image.Width,
image.Height);
objGraphics = Graphics.FromImage(tempimage);
objGraphics.DrawImage(image, nrect);
如您所见,我需要将偏移量 10
添加到 imageposition x 坐标以更正测量问题。
希望我的更新能更清楚地说明这个问题……我做错了什么?请指教..
最佳答案
不使用 TextRenderer,而是使用 GraphicsPath:
var path = new GraphicsPath();
path.AddString(text, font.FontFamily, (int)font.Style, size, new Point(0, 0), StringFormat.GenericTypographic);
var area = Rectangle.Round(path.GetBounds());
这是生成带有文本大小的图像的示例代码:
private Image DrawText(String text, Font font, int size, Color textColor, Color backColor)
{
var path = new GraphicsPath();
path.AddString(text, font.FontFamily, (int)font.Style, size, new Point(0, 0), StringFormat.GenericTypographic);
var area = Rectangle.Round(path.GetBounds());
Rectangle br = Rectangle.Round(path.GetBounds());
var img = new Bitmap(br.Width, br.Height);
var drawing = Graphics.FromImage(img);
drawing.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
drawing.SmoothingMode = SmoothingMode.HighSpeed;
drawing.Clear(backColor);
drawing.TranslateTransform((img.Width - br.Width) / 2 - br.X, (img.Height - br.Height) / 2 - br.Y);
drawing.FillPath(Brushes.Black, path);
Brush textBrush = new SolidBrush(textColor);
drawing.Save();
textBrush.Dispose();
drawing.Dispose();
return img;
}
以下是示例结果:
关于c# - 无法使用 TextRenderer 获得正确的 DrawnText 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43255678/
我一直在研究自定义控件,但我遇到了一个问题,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
我是一名优秀的程序员,十分优秀!