Чувак, Codeplex является Вашим другом-> выезд этот порт из него. Это раньше имело выпуск на 64 бита, но можно или загрузить последнее и скомпилировать для (довольно легких) 64 битов или проверить предыдущие выпуски.
Основываясь на ответе Дрю, лучше всего измерить и расположить контейнер, который передается методу 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, таким как панель стека, холст, сетка и т. Д. ImageViewer.Source должен быть установлен на BitmapImage, который готов к печати.
Я получил идею из этой страницы: http://www.switchonthecode.com/tutorials/printing-in-wpf
Ознакомьтесь с классом PrintDialog
. Все, что вам нужно сделать, это вызвать метод PrintVisual
, передав изображение Image
в качестве визуального элемента, имеющего ваше BitmapImage
в качестве источника.
Возможно, вы захотите настроить другие параметры печати, но вы обнаружите их при изучении PrintDialog и связанных API.