在WPF中,我们可以使用VisualBrush做一些像ppt左侧的事情。
但是当我将VisualBrush缩放到一个小尺寸时,我发现VisualBrush可能会丢失Rectangle中的一行。就像图像一样:
你可以看到VisualBrush丢失了底线。
当我尝试使用使用RenderTargetBitmap获取图像的BitmapImage并使用线性插值算法进行缩放时,将获得清晰图像。
我可以更改VisualBrush的算法吗?我认为它可能会使用邻域像素算法。
是否有任何具有良好性能的打印屏幕算法,如VisualBrush。
当我将搜索关键字更改为ViewBox
时,我可以找到与此问题相同的问题:how to avoid a single pixel line disappear in wpf?
答案 0 :(得分:1)
有一个名为TransformedBitmap
的类可以使用默认缩放算法缩放RenderTargetBitmap
。
使用以下代码:
public static BitmapSource ToBitmapSource(this Visual visual, Size size)
{
var bounds = VisualTreeHelper.GetDescendantBounds(visual);
var width = (int) Math.Round(bounds.Width);
var height = (int) Math.Round(bounds.Height);
var bitmap = new RenderTargetBitmap(width, height, 96.0, 96.0, PixelFormats.Pbgra32);
bitmap.Render(visual);
return new TransformedBitmap(bitmap, new ScaleTransform(size.Width / width, size.Height / height));
}
我在我的演示中尝试了这种方法并得到了下面的结果。您可能会注意到左上角的小矩形没有丢失。