首先,我使用drawString和GraphicsPath.AddString在pictureBox中绘制轮廓/纯文本。我可以更改它的字体大小,样式和字体系列,但是我意识到由于字体大小按比例分配给字符串,因此我无法调整大小/拉伸文本。因此,我被告知的解决方案是:
我被告知,为了缩放文本(从绘制字符串),我需要使用文本将依赖的矩形。通过这种方式,我可以调整整个文本的大小(宽度,高度和宽度)。但是我不知道该怎么做。
PS。如果还有其他方法,您可以告诉我。谢谢大家。
这是我的TextDrawing方法:
public void DrawRects(Font f, string text, Graphics g, RectangleF rect)
{
List<RectangleF> list = new List<RectangleF>();
using (StringFormat format = new StringFormat())
{
int i;
format.Alignment = StringAlignment.Near;
format.LineAlignment = StringAlignment.Center;
format.Trimming = StringTrimming.None;
format.FormatFlags = StringFormatFlags.MeasureTrailingSpaces;
CharacterRange[] ranges = new CharacterRange[text.Length];
for (i = 0; i < text.Length; i++)
{
ranges[i] = new CharacterRange(i, 1);
}
format.SetMeasurableCharacterRanges(ranges);
Region[] regionArray = g.MeasureCharacterRanges(text, f, rect, format);
for (i = 0; i < regionArray.Length; i++)
{
list.Add(regionArray[i].GetBounds(g));
}
foreach (RectangleF r in list)
{
//g.SmoothingMode = SmoothingMode.AntiAlias;
//g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
//g.InterpolationMode = InterpolationMode.High;
g.DrawRectangle(Pens.LightBlue, Rectangle.Round(r));
}
using (GraphicsPath path = new GraphicsPath())
{
path.AddString(text, f.FontFamily, Convert.ToInt32(f.Style), g.DpiY * rect.Height/72f, rect.Location, format);
RectangleF text_rectf = path.GetBounds();
PointF[] target_pts = {
new PointF(rect.Left, rect.Top),
new PointF(rect.Right, rect.Top),
new PointF(rect.Left, rect.Bottom)};
g.Transform = new Matrix(text_rectf, target_pts);
g.FillPath(Brushes.Red, path);
g.DrawPath(Pens.Red, path);
g.ResetTransform();
}
//g.SmoothingMode = SmoothingMode.AntiAlias;
//g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
//g.InterpolationMode = InterpolationMode.High;
//g.DrawString(text, f, Brushes.Red, rect, format);
}
}
和我的 UI 供您参考:
我需要的结果
编辑:我更改了文本绘图上的代码,但仍然无法在每个字母上创建不同的矩形,这些矩形可以使用轨迹栏进行调整。
答案 0 :(得分:1)
我去了,我无法计算出与字母的矩形关系...
尽管如此,我还是提出了一个更优雅,经过时间考验和数学上正确的解决方案。
Alex Fr在其 DrawTools文章中提供了一套出色的绘图工具,该项目是Draw Tool Redux的基础。
Alex Fr的原始项目基于Microsoft C ++ MFC示例项目,开发人员可以从DRAWCLI学习。 DrawTools C#程序再现了DRAWCLI的某些功能,并使用了该示例中的一些设计决策。目前,唯一的查看方法是通过WayBack机器链接:https://web.archive.org/web/20120814082327/https://www.codeproject.com/Articles/8494/DrawTools
我建议您交换图形库,并从一个设计精良的解决方案开始。绘图工具Redux具有我认为您需要的大多数功能。除了我认为我见过example of in Rod Stephens book的“旋转偏移量”,这里还是在WayBack Machine上:Interactively rotate images by an arbitrary angle in C#。