2017-06-12 88 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

相關問題