Autor Beitrag
John Sanson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72

WinXP,WinVista
Delphi(BDS2006, 5), C#(VS2005, BDS2006), VB6
BeitragVerfasst: Mi 31.01.07 21:55 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 01.02.07 11:49 
Hallo,

schau Dir einmal meine Klasse FormPrint 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

ausblenden 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();
            }           
    }

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
John Sanson Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72

WinXP,WinVista
Delphi(BDS2006, 5), C#(VS2005, BDS2006), VB6
BeitragVerfasst: 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.

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