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;
}
4

1 に答える 1

4

うーん..ここですべてが相互作用していることがたくさんある可能性があります:

1位

「グレースケールフォールバック-ClearTypeが無効になっている場合、またはClearTypeアルゴリズムを実行できない特定の状況でテキストをレンダリングしている場合、WPFはグレースケールレンダリングアルゴリズムを使用して、レンダリングされたテキストをアンチエイリアスします。」

テキストをRenderTargetBitmapにレンダリングすることは、そのような状況の1つであるように思われます...(レンダラーがハードウェアパスからソフトウェアパスに切り替わります)。

2位

さらに、NET 4は、デフォルトのスケーリングアルゴリズムを高品質(Fant)から低品質(Bi-Linear)に切り替えました。とにかくビットマップ...しかし、内部で何が起こっているのかはわかりません。スケーラーをより高品質のものに戻すことが可能です。

3位

RichTextBoxの親コンテナを考慮する必要があるかもしれません...以下の最後のリンクを参照してください。フォントのレンダリングが歪む可能性があると述べています。


これを回避する方法に関するいくつかのアイデアは次のとおりです。

  1. RichTextBoxを600dpiなどのより高い解像度でレンダリングしてから、ビットマップを縮小します(おそらく違いはありません)

  2. 画面をキャプチャする....ビジュアルが画面外/不明瞭な場合など、難しいか実用的ではありません。


関連リンクを参照してください:

于 2012-08-03T22:05:07.093 に答える