Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi JPEG aus TImage in bestimmter Größe drucken (https://www.delphipraxis.net/100410-jpeg-aus-timage-bestimmter-groesse-drucken.html)

MCXSC 27. Sep 2007 22:38


JPEG aus TImage in bestimmter Größe drucken
 
Hallo!

Ein Bild drucken, kann man ja mit z.B. folgendem Codeschnipsel:

Delphi-Quellcode:
procedure PrintBitmap(aGraphic: TGraphic, Title: string);
begin
  Printer.Title := Title;
  Printer.BeginDoc;
  Printer.Canvas.Draw(0, 0, aGraphic);
  Printer.EndDoc;
end;
Nun habe ich aber das Problem, dass das Bild meist in seiner Originalgröße ausgedruckt wird, oder aber noch kleiner. Ich habe mich auch schon hier durch die DP gesucht, durch Google gesucht, etc. aber ich finde einfach nichts passendes.

Was ich eigentlich nur will:

Ein Bild aus einer TImage-Komponente so zu drucken, dass es auf dem Papier nachher bestimmte Maße (cm) hat. Ist das Bild in der TImage zu groß, soll es eben auf diese Maße verkleinert, ist es zu klein, vergrößert werden (unproportional).

Aber ich habe bisher nichts passendes dazu gefunden... :(

MCXSC

peschai 28. Sep 2007 12:48

Re: JPEG aus TImage in bestimmter Größe drucken
 
Hallo

Schau dir mal diesen codeschnipsel zum proportionalen resizen an ... nicht beim drucken, aber eventuell hilfts als zündfunke ...

Ein bild als tImage soll so in ein Panel eingeblendet werden, daß es optimal groß proportional dargestellt wird....

Image12.Parent wäre das Panel, wäre in deinem Fall der canvas des blattes zum drucken ... ?

Delphi-Quellcode:
          { JPEGImage }
          ms1.Seek(0, soFromBeginning);
          jpg3.LoadFromStream(ms1);
       
          { Resize }
          if (Image12.Parent.ClientWidth>0) and (jpg3.Width>0) then
            begin
              { Seitenverhältnis Container }
              r1 := (Image12.Parent.ClientHeight/Image12.Parent.ClientWidth);
              { Seitenverhältnis Bild }
              if (jpg3.Width>0)
                then r2 :=(jpg3.Height/jpg3.Width)
                else r2 := 0.0;
              { Container passend zum Bild in Übergeordneten Panel einpassen, damit Stretch automatisch funktioniert }
              if (r1>r2)
                then
                  begin
                    { Container ist im Verhältnis höher als Bild, also auf Breite anpassen }
                    { Faktor damit Bild so breit wie Container wird }
                    r1 := Image12.Parent.ClientWidth/jpg3.Width;
                    Image12.Width := Image12.Parent.ClientWidth;
                    Image12.Left  := 0;
                    Image12.Height := Trunc(r1* jpg3.Height);
                    Image12.Top   := (Image12.Parent.ClientHeight-Image12.Height) div 2;
                  end
                else
                  begin
                    { Container ist im Verhältnis breiter als Bild, also auf Höhe anpassen }
                    { Faktor damit Bild so hoch wie Container wird }
                    r1 := Image12.Parent.ClientHeight/jpg3.Height;
                    Image12.Height := Image12.Parent.ClientHeight;
                    Image12.Top   := 0;
                    Image12.Width := Trunc(r1* jpg3.Width);
                    Image12.Left  := (Image12.Parent.ClientWidth-Image12.Width) div 2;
                  end;
              Image12.Picture.Assign(jpg3);
            end;

Klaus01 28. Sep 2007 14:00

Re: JPEG aus TImage in bestimmter Größe drucken
 
Hallo,

Dein Drucker hat eine bestimmte Auflösung xxx dpi (dots per inch)
also Punkte pro 2,54 cm.
Du mußt Dein Bild dann so vergrößern oder verkleinern das es die Größe
auf dem Drucker erreicht die Du mit der dpi Angabe berechnet hast.

Beispiel:
  • Drucker: 300dpi
  • Bildgröße: 1800x1200 Bildpunkte

1800 / 300 -> 6 inch -> 6 * 2,54 cm -> ca. 15cm

Wenn Du das Bild dann kleiner haben willst, kannst Du das Bild verkleinern.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz