RenderTargetBitmap创建模糊图像

时间:2013-05-23 14:04:11

标签: c# wpf graphics

我有2个控件,一个显示一些矢量图形,这很好用。我的第二个控件将矢量图形显示为位图是个问题。我使用RenderTargetBitmap创建一个所需大小的位图,然后绘制矢量图形的缩放版本。然而,它变得模糊。

double scale = Math.Min(width == 0 ? 1 : targetWidth / frameworkElement.Width, height == 0 ? 1 : targetHeight / frameworkElement.Height);
frameworkElement.RenderTransform = new ScaleTransform(scale, scale);

if (width > 0 && height > 0)
{
    RenderTargetBitmap scaledBitmap = new RenderTargetBitmap((int)targetWidth , (int)targetHeight , 96, 96, PixelFormats.Default);
    scaledBitmap.Render(metaImage);

    Image image = new Image();
    image.Source = scaledBitmap;
    _visualChild = image;
}

其中frameworkElement是可以显示矢量图形的扩展FrameworkElement。 下图显示了以相同大小显示的两个控件之间的差异,右侧视图框中显示的原始矢量图形。并且矢量图形缩放并渲染到左侧的RenderTargetBitmap。

我也尝试过:

  1. 以编程方式创建一个视图框,将其可视子框设置为矢量图形框架工作元素,然后测量并排列绘图视图框(基本上正好在右图中显示的内容)到RenderTargetBitmap。

  2. 创建两个RenderTargetBitmaps,将矢量图形渲染到矢量图形所需大小的第一个。然后使用DrawingGroup和DrawingVisual将第一个RenderTargetBitmap的缩放版本绘制到第二个。这允许我设置RenderOptions。

     RenderOptions.SetBitmapScalingMode(group, BitmapScalingMode.Fant);
    
  3. 但Fant选项产生了相同的结果,其他选项似乎产生了更糟糕的结果。

    还尝试在渲染选项中设置边缘模式,但只能获得EdgeMode.Unspecified和EdgeMode.Aliased之间的选项。

    如何准确地绘制矢量图形控件在视图框内部到位图时显示的图像?

0 个答案:

没有答案