Графика встроенного шрифта Graphics.DrawString C # - PullRequest
0 голосов
/ 11 декабря 2010

Я работаю над созданием приложения, которое будет отображать данные JSON в хорошо отформатированном абзаце.Данные JSON имеют такие вещи, как заголовок, подзаголовок, тело и т. Д. В теле могут быть ссылки (которые мне просто нужно отобразить синим цветом и подчеркнуты). И вот здесь я сталкиваюсь с проблемами.

Программа основана на .net Compact Framework, и мне предоставляется только объект Graphics вместе с объектом JSON (и прямоугольник, шрифт, цвет).В любом случае можно ли красиво нарисовать строку текста со всеми ссылками, измененными на другой цвет / шрифт?

Я думал о том, чтобы нарисовать каждое отдельное слово и просто изменить шрифт прямо тогда, когда слово появляется,Это звучит очень неэффективно.Есть ли лучший способ?

Спасибо:)

Ах, ps Если есть простой способ определить правильную высоту прямоугольника в методе DrawString, чтобы текст не обрезался,это также было бы очень полезно!

ОБНОВЛЕНИЕ: я выяснил свой вопрос PS :) http://www.mobilepractices.com/2007/12/multi-line-graphicsmeasurestring.html

1 Ответ

0 голосов
/ 28 февраля 2011

Хорошо, я закончил тем, что добавил собственный метод рисования со специальными объектами «Word». Объект Word содержит строку, цвет и указатель на шрифт. Я проанализировал текст в словаре объектов Word, затем перебрал все объекты и нарисовал текст с помощью следующего кода sudo

int maxWidth = Width
int curX = 0
int curY = 0

foreach word in words
    if curX > 0
        word = DrawWordUntilWidth(out curX, out curY, word, maxWidth)

    if word != null
        DrawWord(out curX, out curY, word, maxWidth)

DrawWordUntilWidth будет измерять слова в word (уменьшенные пробелами и "-") до curX > maxWidth, а затем нарисует подходящие слова, обрезает строку в слове, устанавливает curX в 0, устанавливает curY += maxWordHeight максимальная высота шрифтов, используемых в этом ряду. Если все слова в word использованы, возвращается ноль, иначе возвращается усеченное слово.

DrawWord очень похож, но работает в предположении, что curX всегда = 0, поэтому он может нарисовать всю строку, а затем установить curX и curY соответственно.

Он работает довольно хорошо, так как в нем немного учеников, и он довольно гладко рендерится. Если у кого-то есть лучшее решение, пожалуйста, дайте мне знать!

...