Entwickler-Ecke

Multimedia / Grafik - Image Drucken


John Sanson - Mi 31.01.07 21:55
Titel: Image Drucken
Hallo,

ich möchte ein Image auf eine komplette DinA4 Seite drucken.

Mein Problem ist nun, die Größe des Bildes anzupassen, da ich nur Größenänderungen mit Pixeleingaben kenne, aber nicht weis wieviel Pixel die Seite hat.

Danke schonmal


JüTho - Do 01.02.07 11:49

Hallo,

schau Dir einmal meine Klasse FormPrint [http://www.mycsharp.de/wbb2/thread.php?threadid=29704] an. Im Quelltext sind u.a. enthalten: Berechnung der Seitengröße in Pixel sowie mit GetThumbnail() ein Verfahren zur Kompression (größeres Bitmap auf Seitengröße zu reduzieren). Vielleicht kannst Du es an Deine Bedürfnisse anpassen.

Warnung: Bei der Vergrößerung könntest Du "Klötzchen" bekommen. Dazu gibt es Glättungsverfahren; aber damit habe ich mich nicht befasst.

Viel Erfolg! Jürgen


Christian S. - Do 01.02.07 12:31

Hallo!

Wenn Du ein PrintDocument verwendest und in der Print-Methode druckst, sollte es doch möglich sein, über die entsprechenden PrintEventArgs rauszufinden, wie groß der Druckbereich in Inch (Stichwort "MarginBounds", IIRC) und über die Auflösung dann in Pixeln ist.

Grüße
Christian

//Edit: Zum Sklaieren des Bildes aus einem alten Projekt von mir


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
        /// <summary>
        /// Ändert die Größe des Bildes auf die neuen Maße ohne weiteres zu beachten.
        /// </summary>
        /// <param name="OldImage">Altes Bild, muss geladen sein</param>
        /// <param name="NewImage">Neues Bild, muss bereits erstellt sein</param>
        /// <param name="Width">Neue Breite in Pixeln</param>
        /// <param name="Height">Neue Höhe in Pixeln</param>
    private void independentResize(ref Bitmap OldImage, ref Bitmap NewImage, int Width, int Height)
    {
            if (Width != OldImage.Width || Height != OldImage.Height)
            {
                Rectangle oldRect = new Rectangle(00, OldImage.Width, OldImage.Height);
                Rectangle newRect = new Rectangle(00, Width, Height);

                Graphics graphic = Graphics.FromImage(NewImage);

                graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                graphic.DrawImage(OldImage, newRect, oldRect, GraphicsUnit.Pixel);
            }
            else
            {
                NewImage = (Bitmap)OldImage.Clone();
            }           
    }


John Sanson - Fr 02.02.07 19:52
Titel: Fertig
Danke für die ausführlichen Antworten.
Hab beim Durchsehen der PrintPageEventArgs eine kurze Lösung gefunden.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
     
            Rectangle RRR= new  Rectangle( (int)e.PageSettings.PrintableArea.X ,(int)e.PageSettings.PrintableArea.Y ,(int)e.PageSettings.PrintableArea.Width ,(int)e.PageSettings.PrintableArea.Height );
           
            e.Graphics.DrawImage(pictureBox1.Image, RRR);
   }