将图像位置设置为页面中心

时间:2018-04-11 15:40:42

标签: wpf printdialog

我试图在页面中央打印图像,但我无法想出任何想法。

System.Windows.Point printLocation = new System.Windows.Point(50,50);
printLocation.X = pageWidth - 50 / 2; 50 is the margin
imageViewer = ImagePrintAdapter.CreateImageFromBitmapImage(img,printLocation);
printerDialog.PrintVisual(imageViewer, "Identification");

这是CreateImageFromBitmapImage方法

public static System.Windows.Controls.Image CreateImageFromBitmapImage(BitmapImage imgSource, System.Windows.Point imgLocation)
 {
   System.Windows.Controls.Image imageViewer = new System.Windows.Controls.Image();
   imageViewer.BeginInit();
   imageViewer.Source = imgSource;

   imageViewer.Measure(new System.Windows.Size(double.PositiveInfinity, double.PositiveInfinity));
   imageViewer.Arrange(new System.Windows.Rect(imgLocation, imageViewer.DesiredSize));

   imageViewer.EndInit();
   imageViewer.UpdateLayout();

   return imageViewer;
}

如果我将printLocation.X设置为pageWidth的一半,那么它不应该从中心开始吗?

1 个答案:

答案 0 :(得分:1)

您可以简单地将图像绘制到DrawingVisual中并进行打印。以下简化示例假定位图大小小于可打印区域大小:

ImageSource image = ...

var rect = new Rect(
    (printDialog.PrintableAreaWidth - image.Width) / 2,
    (printDialog.PrintableAreaHeight - image.Height) / 2,
    image.Width, image.Height);

var visual = new DrawingVisual();
using (var dc = visual.RenderOpen())
{
    dc.DrawImage(bitmap, rect);
}

printDialog.PrintVisual(visual, "");

请注意,您也可以使用任何其他尺寸的矩形,即相应地缩放打印的图像。