如何打印缩放和旋转的图像

时间:2018-09-26 15:06:35

标签: c# wpf

背景

我有一个WPF用户控件,用于显示图像,该图像可以通过多点触摸手势进行旋转和缩放:

<UserControl>
    <i:Interaction.Behaviors>
        <behavior:MultitouchTransformBehavior MaximumScale="100.0" MinimumScale="0.01"/>
    </i:Interaction.Behaviors>

    <Image Source="{Binding Image}"/>
</UserControl>

这很好。我也可以使用PrintDocument类来打印原始源图片。

问题

现在,我想按用户在屏幕上看到的图像(即处于缩放和旋转状态)打印图像。

我该如何实现?

1 个答案:

答案 0 :(得分:2)

您可以这样做:

   public static void CreateBitmapFromVisual(Visual target, string fileName)
    {
        if (target == null || string.IsNullOrEmpty(fileName))
        {
            return;
        }

        Rect bounds = VisualTreeHelper.GetDescendantBounds(target);

        RenderTargetBitmap renderTarget = new RenderTargetBitmap((Int32)bounds.Width, (Int32)bounds.Height, 96, 96, PixelFormats.Pbgra32);

        DrawingVisual visual = new DrawingVisual();

        using (DrawingContext context = visual.RenderOpen())
        {
            VisualBrush visualBrush = new VisualBrush(target);
            context.DrawRectangle(visualBrush, null, new Rect(new Point(), bounds.Size));
        }

        renderTarget.Render(visual);
        PngBitmapEncoder bitmapEncoder = new PngBitmapEncoder();
        bitmapEncoder.Frames.Add(BitmapFrame.Create(renderTarget));
        using (Stream stm = File.Create(fileName))
        {
            bitmapEncoder.Save(stm);
        }
    }

遇到相同问题时,我从here那里拿走了。