Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 图像质量模糊_C#_Wpf - Fatal编程技术网

C# 图像质量模糊

C# 图像质量模糊,c#,wpf,C#,Wpf,我想将一些XAML转换成一个图像,所以我创建了一个RichTextBox,然后拍摄了它的图像。现在的问题是图像中的文字模糊了,你们知道我该如何修复它吗 public System.Drawing.Bitmap ConvertXamltoImage(string XamlString, int Width, int Height) { RichTextBox AdContentRichTextBox = new RichTextBox() { Width = Width, Height

我想将一些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;
}

嗯……这里可能有很多东西相互作用:

第一

灰度回退-如果ClearType被禁用,或者在某些无法运行ClearType算法的情况下正在渲染文本,WPF将使用灰度渲染算法对渲染文本进行反别名

将文本渲染到RenderTargetBitmap似乎是其中一种情况……(渲染器从硬件路径切换到软件路径)

第二

此外,NET4将默认的缩放算法从高质量(Fant)切换到低质量(双线性)…现在这不应该在这里起作用,因为它看起来不像是以任何方式缩放位图…但您永远不知道内部发生了什么。可以将定标器切换回更高质量的定标器

第三

您可能需要考虑RichTextBox的父容器…请参阅下面的最后一个链接,其中提到它可能会扭曲字体呈现


关于如何解决这一问题的一些想法如下:

  • 以更高的分辨率渲染RichTextBox,例如600dpi,然后缩小位图的比例(可能不会有任何区别)

  • 捕捉屏幕…如果您的视觉在屏幕外/模糊等,则很难或不实用


  • 见相关链接:


    Hmmmm..这里可能有很多东西相互作用:

    第一

    灰度回退-如果ClearType被禁用,或者在某些无法运行ClearType算法的情况下正在渲染文本,WPF将使用灰度渲染算法对渲染文本进行反别名

    将文本渲染到RenderTargetBitmap似乎是其中一种情况……(渲染器从硬件路径切换到软件路径)

    第二

    此外,NET4将默认的缩放算法从高质量(Fant)切换到低质量(双线性)…现在这不应该在这里起作用,因为它看起来不像是以任何方式缩放位图…但您永远不知道内部发生了什么。可以将定标器切换回更高质量的定标器

    第三

    您可能需要考虑RichTextBox的父容器…请参阅下面的最后一个链接,其中提到它可能会扭曲字体呈现


    关于如何解决这一问题的一些想法如下:

  • 以更高的分辨率渲染RichTextBox,例如600dpi,然后缩小位图的比例(可能不会有任何区别)

  • 捕捉屏幕…如果您的视觉在屏幕外/模糊等,则很难或不实用


  • 见相关链接:


    不,我不能,但我认为这与dpi有关,当我从96变为300时,一切正常。但是图像的某些部分没有显示,因此我如何在不影响原始图像显示的情况下更改dpi,并且存在AdContentRichTextBox.Document=(FlowDocument)XamlReader.Parse(XamlString)而不是AdContentRichTextBox.Document=XamlString;不,我不能,但我认为这与dpi有关,当我从96变为300时,一切都正常。但是图像的某些部分没有显示,因此我如何在不影响原始图像显示的情况下更改dpi,并且存在AdContentRichTextBox.Document=(FlowDocument)XamlReader.Parse(XamlString)而不是AdContentRichTextBox.Document=XamlString;