Я пытаюсь написать функцию, которая должна нарисовать строку для изображения. Изображение имеет от 1 до 5 текстовых полей, каждый из которых имеет x, y, ширину и высоту. Эти данные определены в XML-файле, который я обрабатываю, поэтому у меня есть доступ к ним для каждого окна.Graphics.DrawString для нескольких прямоугольников
Мой вопрос заключается в том, могу ли я использовать графический инструмент.DrawString (или аналогичный), чтобы сделать это легко. Функция примера ниже создаст прямоугольник с указанными x, y, width, height, а затем нарисует строку внутри. Если строка не подходит, она обрезается.
public void DrawStringRectangleFormat(Graphics g)
{
// Create string to draw.
String drawString = "Sample Text is too long to fit into this tiny lil rectangle area right here";
// Create font and brush.
Font drawFont = new Font("Arial", 16);
SolidBrush drawBrush = new SolidBrush(Color.Black);
// Create rectangle for drawing.
float x = 150.0F;
float y = 150.0F;
float width = 200.0F;
float height = 50.0F;
RectangleF drawRect = new RectangleF(x, y, width, height);
// Set format of string.
StringFormat drawFormat = new StringFormat();
drawFormat.Alignment = StringAlignment.Center;
// Draw string to screen.
g.DrawString(drawString, drawFont, drawBrush, drawRect, drawFormat);
}
Что я хочу вместо этого, скорее, чем усечений, он остановится на последний фитинг слова, и перейти к следующему прямоугольнику (текстовое поле). Таким образом, я могу использовать все доступные текстовые поля.
Есть ли способ, уже сделанный для этого? В противном случае мне нужно будет реализовать собственный метод drawString.
Я думаю, что вы будете нуждаться, чтобы разбить строку на слова, вызовите [ 'GraphicsMeasureString()'] (https://msdn.microsoft.com/en-us/library/6xe5hazb % 28v = vs.110% 29.aspx? F = 255 & MSPPError = -2147217396), и сделать это сложно. Не слишком, слишком. Учитывая список кортежей '{word, wordRect}', это простой цикл, который соответствует тексту. –
Я думаю, вам нужно посмотреть на «Graphics.MeasureCharacterRanges», чтобы увидеть, какие слова нужно урезать. Эта функция может использоваться для вычисления координат окна для групп символов в вашей строке (например, каждое слово). Если вы попытаетесь использовать несколько вызовов в «Graphics.MeasureString», я боюсь, что результаты не будут достаточно точными из-за кернинга. – RogerN