Печать WPF BitmapImage
Какой лучший способ распечатать BitmapImage? Я пришел из системы в System.Drawing, поэтому думал о том, чтобы преобразовать его в растровое изображение и затем распечатать, но я думаю, что, возможно, есть лучший способ.
Спасибо!
2 ответа
Основываясь на ответе Дрю, лучше всего измерить и расположить контейнер, который передается методу PrintVisual. Это предотвратит обрезание изображения размером более 8,5 x 11 листов. Вот пример того, как я напечатал изображение, которое было частично видимым на экране:
PrintDialog dlg = new PrintDialog();
bool? result = dlg.ShowDialog();
if (result.HasValue && result.Value)
{
ImageViewer.Measure(new Size(dlg.PrintableAreaWidth, dlg.PrintableAreaHeight));
ImageViewer.Arrange(new Rect(new Point(0, 0), ImageViewer1.DesiredSize));
dlg.PrintVisual(ImageViewer, "Print a Large Image");
}
ImageViewer в моем примере может быть заменен любым контейнером UIElement, таким как панель стека, canvas, grid, ect. ImageViewer.Source должен быть установлен в BitmapImage, который готов к печати.
Я получил идею с этой страницы: http://www.switchonthecode.com/tutorials/printing-in-wpf
Проверьте PrintDialog
класс Все, что вам нужно сделать, это позвонить в PrintVisual
метод, передаваемый вImage
как визуал, который имеет ваш BitmapImage
как источник.
Возможно, вы захотите настроить другие параметры печати, но вы обнаружите их при изучении PrintDialog и связанных с ним API.
У нелогичного ответа есть проблема, он всегда растягивает изображение до размера страницы и обрезает некоторый контент при попытке это.
Поэтому я написал собственное решение, которое только растягивает (это правильное слово?), Если изображение слишком велико, может использовать множественные копии и ориентации страниц.
Вот код