2

我有 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. 创建两个 RenderTargetBitmap,将矢量图以所需的矢量图大小渲染到第一个。然后使用 DrawingGroup 和 DrawingVisual 将第一个 RenderTargetBitmap 的缩放版本绘制到第二个。这允许我设置 RenderOptions。

     RenderOptions.SetBitmapScalingMode(group, BitmapScalingMode.Fant);
    

但 Fant 选项产生了相同的结果,而其他选项似乎产生了更差的结果。

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

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

4

0 回答 0