2010-05-03 56 views
3

有沒有辦法在.Net 2.0中繪製混合格式文本?我在尋找類似的東西,以如何使用.Net 2.0繪製混合格式文本

System.Drawing.Graphics.DrawString() 

我的問題,這種方法是,只允許有一個對整個文本格式樣式。但我需要繪製具有不同格式樣式的文本(例如,文本的一部分應加下劃線,另一部分加粗)等等。

非常感謝!
奧利弗

+0

你在找什麼是添加到.NET 3.5的功能(也許.NET 3.0?) - 我知道在.NET 2.0中沒有原生的方式來做到這一點 - 儘管如此,可能有一些第三方插件可以解決這個問題。 – Pretzel 2010-05-03 13:25:51

回答

1

我從書上WPF in Action拉一個答案正確的 - 你似乎有2種選擇:

  • 創建一個自定義的控制和定義自己的標記,用於指定字體 。除此之外,還有很多工作要做,你還必須依靠衆所周知的不準確的方法來測量文本的寬度(以便你可以計算出下一個字的位置)。

  • 使用RTF控件。這是非常沉重的,你最終會花費大量時間使它看起來像文本而不是編輯控件,並且你必須使用RTF來按照你想要的方式來獲取文本。

所以我想答案是RTF控制(又名RichTextBox)。如果你堅持使用.NET 2.0 - 的WinForms。那麼,除非你想寫你自己的控制... :-)

本書還提到採取各種標籤和/或文本框控件和手動(或編程)對齊它們並設置不同的字體值等。但我認爲你想避免這種情況,對吧?

編輯

我要離開我的就地上面的回答。這裏是我的新回答你:

查找到GDI + - 這是在C#角的教程鏈接應該把你介紹給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 +是一個相當沉重的話題。我通過Pro .NET 2.0 Windows Forms and Custom Controls in C#這本書學習了大部分關於GDI +的知識(這是我的經驗中的一本好書。)雖然您對WinForms的自定義控件設計並不是很感興趣,但您可能希望尋找一本更直接面向GDI + 。

+0

嗨, 我與RichTextBox的問題:我不想在應用程序中顯示文本,但我想繪製它在System.Drawing.Bitmap對象,然後將其另存爲PNG文件。 我想過使用RichTextBox作爲輸入元素,但我不知道如何在Bitmap對象上繪製文本。 – Baldewin 2010-05-03 13:58:34

+0

@Baldewin:看到我上面更新的答案。 – Pretzel 2010-05-03 16:53:41

0

如果你想使用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) 玩它,你會的。