Как напечатать масштабированное и повернутое изображение

2

Фон

У меня есть пользовательский элемент управления WPF, который отображает изображение, которое можно поворачивать и масштабировать с помощью жестов с несколькими касаниями:

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

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

Это прекрасно работает. Я также могу распечатать исходное исходное изображение с PrintDocument класса PrintDocument.

Вопрос

Теперь я хотел бы напечатать изображение, когда пользователь видит его на экране, то есть в увеличенном и повернутом состоянии.

Как я могу это достичь?

Теги:
wpf

1 ответ

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

Я взял это отсюда, когда у меня была такая же проблема.

  • 0
    Спасибо за Ваш ответ. Я могу подтвердить, что он генерирует файл изображения. В моем случае это все еще оригинальное изображение, а не масштабированная / повернутая версия. Я не знаю, как интегрировать вашу функцию в мой пользовательский контроль.
  • 0
    Хорошо, это работает. Также проверьте этот код

Ещё вопросы

Сообщество Overcoder
Наверх
Меню