我有 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。
创建两个 RenderTargetBitmap,将矢量图以所需的矢量图大小渲染到第一个。然后使用 DrawingGroup 和 DrawingVisual 将第一个 RenderTargetBitmap 的缩放版本绘制到第二个。这允许我设置 RenderOptions。
RenderOptions.SetBitmapScalingMode(group, BitmapScalingMode.Fant);
但 Fant 选项产生了相同的结果,而其他选项似乎产生了更差的结果。
还尝试在渲染选项中设置边缘模式,但您只能获得 EdgeMode.Unspecified 和 EdgeMode.Aliased 之间的选项。
当矢量图形控件在视图框内到位图时,如何准确绘制将由矢量图形控件显示的图像?