title: Scaling image for printing
body: <p>I'm using the following code to print an image from a PictureBox.
  All works great except for scaling images down if they are bigger than the print page.
  Is there a method I'm missing to do this?</p>
  
  <p>Screenshot, large image outside of the paper bounds:</p>
  
  <p><a href="http://a.yfrog.com/img46/63/problemsh.png" rel="nofollow noreferrer">http://a.yfrog.com/img46/63/problemsh.png http://a.yfrog.com/img46/63/problemsh.png</a></p>
  
  <pre><code>Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      AddHandler PrintDocument1.PrintPage, AddressOf OnPrintPage
  
      With PageSetupDialog1
          .Document = PrintDocument1
          .PageSettings = PrintDocument1.DefaultPageSettings
  
          If PictureEdit1.Image.Height &gt;= PictureEdit1.Image.Width Then
              PageSetupDialog1.PageSettings.Landscape = False
          Else
              PageSetupDialog1.PageSettings.Landscape = True
          End If
  
      End With
  
      PrintDialog1.UseEXDialog = True
      PrintDialog1.Document = PrintDocument1
  
      If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
          PrintPreviewDialog1.Document = PrintDocument1
          If PrintPreviewDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
  
              PrintDocument1.DefaultPageSettings = PageSetupDialog1.PageSettings
              PrintDocument1.Print()
  
          End If
      End If
  End Sub
  
  Private Sub OnPrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
      Dim img As Image = PictureEdit1.Image
  
      Dim sz As New SizeF(100 * img.Width / img.HorizontalResolution, 100 * img.Height / img.VerticalResolution)
      Dim p As New PointF((e.PageBounds.Width - sz.Width) / 2, (e.PageBounds.Height - sz.Height) / 2)
      e.Graphics.DrawImage(img, p)
  End Sub
  </code></pre>