Text 如何使用.NET2.0绘制混合格式文本

Text 如何使用.NET2.0绘制混合格式文本,text,.net-2.0,system.drawing,Text,.net 2.0,System.drawing,有没有一种方法可以在.NET2.0中绘制混合格式的文本?我在找类似的东西 System.Drawing.Graphics.DrawString() 我对这种方法的问题是,它只允许整个文本使用一种格式样式。但我需要绘制具有不同格式样式的文本(例如,文本的一部分应加下划线,另一部分加粗,等等) 非常感谢 奥利弗我正从书中找到答案——你似乎有两个选择: 创建自定义控件并定义自己的标记以指定字体。除了这是大量的工作之外,你还必须依靠那些众所周知的不准确的方法来测量文本的宽度(这样你才能知道下一个单词

有没有一种方法可以在.NET2.0中绘制混合格式的文本?我在找类似的东西

System.Drawing.Graphics.DrawString()
我对这种方法的问题是,它只允许整个文本使用一种格式样式。但我需要绘制具有不同格式样式的文本(例如,文本的一部分应加下划线,另一部分加粗,等等)

非常感谢

奥利弗

我正从书中找到答案——你似乎有两个选择:

  • 创建自定义控件并定义自己的标记以指定字体。除了这是大量的工作之外,你还必须依靠那些众所周知的不准确的方法来测量文本的宽度(这样你才能知道下一个单词应该放在哪里)

  • 使用RTF控件。这是非常沉重的,你会花费大量的时间使它看起来像文本而不是编辑控件,你必须使用RTF来获得你想要的文本

因此,如果您一直使用.NET2.0--WinForms,我想答案是RTF控件(又名)。除非你想写你自己的控件…:-)

这本书还提到使用各种标签和/或文本框控件,手动(或编程)对齐它们,设置不同的字体值,等等。但我想你是想避免这种情况,对吗

编辑

我将保留上述答案。以下是我给你的新答案:

看看GDI+——这里有一个链接,指向C#Corner上的一个教程,该教程将向您介绍GDI+:

下面是一个链接,它应该向您展示如何将GDI+与位图/图像一起使用:

祝你好运


另外,你可能想读一本关于GDI+的书,因为GDI+是一个相当沉重的话题。我主要是通过这本书学习GDI+(在我的经验中,这是一本好书)。尽管您对为WinForms设计自定义控件并不感兴趣,但您可能想找一本更直接面向GDI+的书。

如果您想使用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中)
随意使用。

您想要的是添加到.NET 3.5(可能是.NET 3.0?)中的功能--我知道在.NET 2.0中没有本地方法可以实现这一点--可能有一些第三方插件可以解决这个问题。嗨,RichTextBox的问题:我不想在应用程序中显示文本,但我想在System.Drawing.Bitmap对象上绘制它,然后将其保存为PNG文件。我曾想过使用RichTextBox作为输入元素,但我不知道如何在位图对象上绘制文本。