Сначала я использовал 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 для справки:
Результат мне нужен:
Редактировать: Я изменил код на своем текстовом чертеже, но я до сих пор не могу создать разные прямоугольники для каждой буквы, размер которых можно изменить с помощью трекбара.