如何在更新uwp中的视图后使用RenderedTargetBitmap?

时间:2018-02-04 17:54:39

标签: uwp rendertargetbitmap

我有滚动查看器来缩放图像,我缩放了图像并对图像进行了一些更改。然后,我试图按下按钮保存图像。在按钮单击中,我已将Zoom factor值更改为1,然后使用RenderedTargetBitmap类来获取滚动查看器的流。

现在我只获得了缩放区域值,无法获得我点击按钮所做的更改。我知道RenderedTagetBitmap只返回可见值,但我想要缩小值。请建议我。

1 个答案:

答案 0 :(得分:1)

  

现在我只获得了缩放区域值,无法获得我点击按钮所做的更改。

通过我的测试,如果如您所述,将缩放系数更改为1,则RenderedTagetBitmap可以正确显示整个图像,当缩放系数为1时,显示在ScrollViewer内,不仅如此缩放区域。这是简单的测试代码:

private async void btnsave_Click(object sender, RoutedEventArgs e)
{ 
    if (RenderedScroll.ChangeView(0, 0, 1, true))
    {
        RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
        await renderTargetBitmap.RenderAsync(RenderedScroll, width, height);
        RenderedImage.Source = renderTargetBitmap;
    }
}

但是如果我没有禁用ChangeView方法的动画,RenderedTagetBitmap可能只会占用与你相同的缩放区域。这是因为RenderedTagetBitmapScrollViewer完成更改视图之前将ScrollViewer的内容视为因子1,因为更改视图动画需要一段时间才能完成。在这种情况下,您可能需要等待一段时间才能播放动画。

private async void btnsave_Click(object sender, RoutedEventArgs e)
{ 
    if (RenderedScroll.ChangeView(0, 0, 1))
    {
        await Task.Delay(TimeSpan.FromMilliseconds(500));
        RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
        await renderTargetBitmap.RenderAsync(RenderedScroll, width, height);
        RenderedImage.Source = renderTargetBitmap;
    } 
}

或者只是禁用ChangeView动画作为第一个代码块显示,如果你不需要它。