Фон
У меня есть пользовательский элемент управления WPF, который отображает изображение, которое можно поворачивать и масштабировать с помощью жестов с несколькими касаниями:
<UserControl>
<i:Interaction.Behaviors>
<behavior:MultitouchTransformBehavior MaximumScale="100.0" MinimumScale="0.01"/>
</i:Interaction.Behaviors>
<Image Source="{Binding Image}"/>
</UserControl>
Это прекрасно работает. Я также могу распечатать исходное исходное изображение с PrintDocument
класса PrintDocument
.
Вопрос
Теперь я хотел бы напечатать изображение, когда пользователь видит его на экране, то есть в увеличенном и повернутом состоянии.
Как я могу это достичь?
Вы можете сделать это следующим образом:
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);
}
}
Я взял это отсюда, когда у меня была такая же проблема.