2012-08-03 90 views
0

我有一種情況,我想將某些XAML轉換爲圖像,所以我創建了一個RichTextBox,然後拍攝了它的圖像。現在的問題是,圖像中的文字模糊,任何想法如何我可以修復它?圖像質量很模糊

public System.Drawing.Bitmap ConvertXamltoImage(string XamlString, int Width, int Height) 
{ 

    RichTextBox AdContentRichTextBox = new RichTextBox() { Width = Width, Height = Height }; 
    AdContentRichTextBox.BorderThickness = new Thickness(0); 
    XmlReader _XmlReader = XmlReader.Create(new StringReader(XamlString)); 

    AdContentRichTextBox.Document = XamlString;   

    var size = new Size(Width, Height); 
    AdContentRichTextBox.Measure(size); 
    AdContentRichTextBox.Arrange(new Rect(size)); 
    RenderTargetBitmap bmp = new RenderTargetBitmap(Width, Height, 300, 300, PixelFormats.Pbgra32); 

    bmp.Render(AdContentRichTextBox); 


    DrawingVisual _drawingVisual = new DrawingVisual(); 

    using (DrawingContext _drwaingContext = _drawingVisual.RenderOpen()) 
    { 
     VisualBrush _visualBrush = new VisualBrush(AdContentRichTextBox); 
    } 

    PngBitmapEncoder _png = new PngBitmapEncoder(); 

    _png.Frames.Add(BitmapFrame.Create(bmp)); 
    System.Drawing.Bitmap _tempBitmap = null; 
    using (Stream _fileStream = new MemoryStream()) 
    { 
     _png.Save(_fileStream); 
     _tempBitmap = new System.Drawing.Bitmap(_fileStream); 

     _fileStream.Flush(); 
    } 
    return _tempBitmap; 
} 
+2

你能告訴我們一個形象呢? – 2012-08-03 21:24:01

+1

不,我認爲這是關於DPI的事情,當我從96變成300時,一切都很好。但一些圖像部分沒有顯示,所以我如何更改dpi,而不會影響原始圖像顯示 – Haider 2012-08-03 21:50:04

+1

,並且存在AdContentRichTextBox.Document =(FlowDocument)XamlReader.Parse(XamlString)而不是AdContentRichTextBox.Document = XamlString; – Haider 2012-08-03 21:53:11

回答

3

Hmmmm..there可能有很多東西都在這裏互動:

「灰度回落 - 如果的ClearType被禁用或一個是在某些情況下呈現文本,其中ClearType的算法無法運行,WPF將使用灰度渲染算法對渲染文本進行抗鋸齒。「

將文本渲染到RenderTargetBitmap似乎是其中一種情況....(渲染器從硬件切換到軟件路徑)。

第二

此外NET 4切換默認的高品質(凡特)低質量(雙線性)縮放算法.....現在不該來這裏發揮作用,因爲它看起來你並不是以任何方式縮放位圖......但你永遠不知道里面發生了什麼。可以將縮放器切換回更高質量的縮放器。

您可能需要考慮在RichTextBox的父容器......見下面最後一個環節,提到它可以扭曲字體渲染。


如何解決這方面的一些想法是:

  1. 以更高的分辨率渲染的RichTextBox例如600dpi的,然後縮小的位圖(將可能使沒有區別)

  2. 捕捉圖像的畫面....困難或不實際的,如果你的視覺在視線以外/模糊等


見相關鏈接: