2017-06-12 70 views
1

在WPF中,我们可以使用VisualBrush做一些像ppt左边的事情。如何修复VisualBrush丢失的行?

但我看到,当我缩放VisualBrush一个小size.Like图像的VisualBrush可能迷失在边框的线:

enter image description here

你可以看到VisualBrush失去了底线。

但我要的是像下面的图片:enter image description here

当我尝试使用使用RenderTargetBitmap获得的图像,并使用线性插值算法放大会得到一个清晰图像的BitmapImage。

我可以改变VisualBrush的算法,我认为它可能会使用邻域像素算法。

是否有任何像VisualBrush一样具有良好性能的打印屏幕算法。

当我改变我对ViewBox搜索键,我可以找到同样的问题,因为这一个:how to avoid a single pixel line disappear in wpf?

+0

我觉得ViewBox可能是根本问题。 – lindexi

+0

请参阅:https://stackoverflow.com/questions/29552339/how-to-avoid-a-single-pixel-line-disappear-in-wpf – lindexi

回答

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)); 
} 

我试着在我的演示这种方法,并得到下面的结果。您可能会注意到,左上角的小矩形没有任何损失。

enter image description here

+0

Thx @walterlv,我可以将我的矩形放大到一个小尺寸。 [](https://i.stack.imgur.com/jfNbD.png)。但它不能用于输入它不是一个控件。 – lindexi

相关问题