Avatar billede Lasse Novice
05. juni 2003 - 18:39 Der er 1 løsning

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;
        }

    }
Avatar billede Lasse Novice
07. juni 2003 - 16:53 #1
Det har noget at goere med at jeg bruger det forkerte papir, saa derfor er stoerrelsen heller ikke rigtig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester