0

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

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

4

1 回答 1

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可能只会占用与您相同的缩放区域。这是因为更改视图动画需要一段时间才能完成,因此将完成更改视图之前RenderedTagetBitmap的内容取为因子 1。在这种情况下,您可能需要等待一段时间才能播放动画。ScrollViewerScrollViewer

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或者,如果您不需要,只需禁用动画,因为第一个代码块显示。

于 2018-02-05T03:31:58.860 回答