Как нарисовать смешанный формат текста .Net 2.0 - PullRequest
3 голосов
/ 03 мая 2010

Есть ли способ рисовать смешанный форматированный текст в .Net 2.0? Я ищу что-то похожее на

System.Drawing.Graphics.DrawString()

Моя проблема с этим методом в том, что он допускает только один стиль форматирования для всего текста. Но мне нужно нарисовать текст, имеющий разные стили формата (например, часть текста должна быть подчеркнута, другая часть выделена жирным шрифтом и т. Д.)

Большое спасибо!
Оливер

Ответы [ 2 ]

1 голос
/ 03 мая 2010

Я вытащил ответ прямо из книги WPF в действии - У вас, кажется, есть 2 варианта:

  • Создайте пользовательский элемент управления и определите собственную разметку для указания шрифтов . Помимо этой большой работы, вам также придется полагаться на общеизвестно неточные методы измерения ширины текста (чтобы вы могли выяснить, куда поместить следующее слово).

  • Использовать управление RTF . Это очень тяжело, и вам придется тратить много времени на то, чтобы сделать его похожим на текст, а не на элемент управления редактированием, и вам придется работать с RTF, чтобы получить текст так, как вы хотели.

Так что я думаю, что ответом является элемент управления RTF (он же RichTextBox ), если вы застряли в .NET 2.0 - WinForms. Ну, если вы не хотите написать свой собственный контроль ...: -)

В книге также упоминается использование различных элементов управления надписями и / или текстовыми полями и их ручное (или программное) выравнивание и настройка для получения разных значений шрифта и т. Д. Но я полагаю, вы хотите этого избежать, верно?

EDIT

Я оставляю свой ответ выше на месте. Вот мой новый ответ вам:

Посмотрите на GDI + - Вот ссылка на учебник в C # Corner, который должен познакомить вас с GDI +: http://www.c -sharpcorner.com / uploadfile / mahesh / gdi_plus12092005070041am / gdi_plus.aspx

А вот ссылка, которая должна показать вам, как использовать GDI + с растровым изображением / изображением: http://ondotnet.com/pub/a/dotnet/2003/05/05/gdiplus.html

Удачи!

Кроме того, вы можете выбрать книгу по этому вопросу, поскольку GDI + является довольно тяжелой темой. Большую часть моего изучения GDI + я получил из книги Pro .NET 2.0 Windows Forms и пользовательских элементов управления в C # (по моему опыту, это хорошая книга.) Хотя вы не очень заинтересованы в разработке пользовательских элементов управления для WinForms вы, возможно, захотите найти книгу, ориентированную непосредственно на GDI +.

0 голосов
/ 19 июля 2013

Если вы хотите использовать HTML для разметки вашего текста, попробуйте это:

Private Sub DrawHTMLString(sHTML As String, rct As RectangleF, dpiX As Single, dpiY As Single, g As Graphics)
    DrawHTMLString(sHTML, rct.X, rct.Y, rct.Width, rct.Height, dpiX, dpiY, g)
End Sub

Private Sub DrawHTMLString(sHTML As String, x As Single, y As Single, width As Single, height As Single, dpiX As Single, dpiY As Single, g As Graphics)
    g.InterpolationMode = InterpolationMode.NearestNeighbor
    g.SmoothingMode = SmoothingMode.AntiAlias
    g.CompositingQuality = CompositingQuality.AssumeLinear
    g.TextRenderingHint = TextRenderingHint.AntiAlias

    g.DrawImage(DrawHTMLString(sHTML, width, height, dpiX, dpiY), x, y)
End Sub

Private Function DrawHTMLString(sHTML As String, width As Single, height As Single, dpiX As Single, dpiY As Single) As Bitmap
    Dim bmp As Bitmap = Nothing
    Dim doc As HtmlDocument = Nothing

    Using wb As New WebBrowser()
        wb.ScrollBarsEnabled = False
        wb.ScriptErrorsSuppressed = True
        wb.Navigate("about:blank")

        wb.Width = width : wb.Height = height

        doc = wb.Document.OpenNew(True)
        doc.Write(sHTML)

        bmp = New Bitmap(wb.Width, wb.Height, PixelFormat.Format32bppArgb)
        bmp.SetResolution(dpiX, dpiY)

        wb.DrawToBitmap(bmp, New Rectangle(0, 0, wb.Width, wb.Height))
    End Using

    Return bmp
End Function

(Извините, это в VB.NET) Играй с ним, как хочешь.

...