我有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。
我也尝试过:
以编程方式创建一个视图框,将其可视子框设置为矢量图形框架工作元素,然后测量并排列绘图视图框(基本上正好在右图中显示的内容)到RenderTargetBitmap。
创建两个RenderTargetBitmaps,将矢量图形渲染到矢量图形所需大小的第一个。然后使用DrawingGroup和DrawingVisual将第一个RenderTargetBitmap的缩放版本绘制到第二个。这允许我设置RenderOptions。
RenderOptions.SetBitmapScalingMode(group, BitmapScalingMode.Fant);
但Fant选项产生了相同的结果,其他选项似乎产生了更糟糕的结果。
还尝试在渲染选项中设置边缘模式,但只能获得EdgeMode.Unspecified和EdgeMode.Aliased之间的选项。
如何准确地绘制矢量图形控件在视图框内部到位图时显示的图像?