Search code examples
.netwpfprintingimaging

Printing a WPF BitmapImage


What's the best way to print a BitmapImage? I come from a background in System.Drawing so I was thinking about converting it to a Bitmap and then printing it, but I'm thinking there's probably a better way.

Thanks!


Solution

  • Building upon Drew's answer, it is best to measure and arrange the container that is handed to the PrintVisual method. This will prevent an image that is larger than a 8.5 x 11 sheet of paper from being cut off. Here is an example of how I printed an image that was partially visible on-screen:

    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 in my example could be replaced with any UIElement container such as a stackpanel, canvas, grid, ect. ImageViewer.Source should be set to the BitmapImage that is ready to be printed.

    I got the idea from this page: http://www.switchonthecode.com/tutorials/printing-in-wpf