Print billede
Jeg skal printe et billede(et bitmap). Jeg har billedet i en instans af en picturebox. Derefter har jeg koden der er vedhaeftet i enden af dette. Problemet er at naar jeg skriver ud til papiret, saa kommer hele billedet ikke med. Den magler ca. 1/15 af billedet, hvilket jo ikke er optimalt. Hvad goer jeg forkert?private void cmdPrint_Click(object sender, System.EventArgs e)
{
System.Drawing.Printing.PrintDocument document = new System.Drawing.Printing.PrintDocument();
document.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.PrintDocumentOnPrintPage );
//having serious problems with this... irritating...
document.DefaultPageSettings.Color = false;
//document.DefaultPageSettings.Landscape = this.viewer1.Image.Width > this.viewer1.Image.Height;
/* document.DefaultPageSettings.Margins.Left = 1;
document.DefaultPageSettings.Margins.Right = 1;
document.DefaultPageSettings.Margins.Top = 1;
document.DefaultPageSettings.Margins.Bottom = 1;
*/
this.printDialog1.Document = document;
if(this.printDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
document.Print();
}
private void PrintDocumentOnPrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs ppea )
{
Graphics grfx = ppea.Graphics;
System.Diagnostics.Debug.WriteLine(ppea.PageSettings.PaperSize);
System.Diagnostics.Debug.WriteLine(ppea.PageSettings.Bounds);
System.Diagnostics.Debug.WriteLine(ppea.MarginBounds);
System.Diagnostics.Debug.WriteLine(ppea.PageBounds);
// I am having problems writing out complete picture, so that is why I add 1/20 in the end
double scaleWidth = (double)ppea.MarginBounds.Width / (this.viewer1.Image.Width /* + this.viewer1.Image.Width / 20*/);
double scaleHeight = (double)ppea.MarginBounds.Height / (this.viewer1.Image.Height /* + this.viewer1.Image.Height / 20*/ );
double scale = scaleWidth < scaleHeight ? scaleWidth : scaleHeight;
if(scale >= 1.0)
{
//print normal size
grfx.DrawImage(this.viewer1.Image, 0, 0);
}
else
{
//ppea.Cancel = true;
// print shrinked size
grfx.DrawImage(
this.viewer1.Image,
new System.Drawing.Rectangle(ppea.MarginBounds.Left,ppea.MarginBounds.Top, (int)(this.viewer1.Image.Width * scale), (int)(this.viewer1.Image.Height * scale)),
new System.Drawing.Rectangle(0,0, this.viewer1.Image.Width, this.viewer1.Image.Height),
System.Drawing.GraphicsUnit.Pixel);
}
return;
}
}
