Autor Beitrag
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Mo 20.05.13 13:36 
Hallo,

ich möchte gerne in Delphi ein Bild auf einer DIN A4 Seite (im Querformat) ausdrucken. Und zwar soll das Bitmap so vergrößert werden, dass es das komplette Blatt füllt. Die Seitenverhältnisse sollten dabei gleich bleiben.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Var Rect:TRect;
...
 Printer.BeginDoc;
 Printer.Orientation:=TPrinterOrientation(poLandscape); //Querformat
 Printer.Canvas.StretchDraw(Rect,Image1.Picture.Graphic);
 Printer.EndDoc;

Das Drucken funktioniert, allerdings weiss ich nicht, wie ich die Bildgröße ans DIN A4 Format anpassen kann. Kann oder muss man die Auflösung berechnen? Und macht es Sinn, statt StretchDraw aus Qualitätsgründen andere Routinenen zum Skalieren mit verschiedenen Filtern zu nutzen?

Danke schonmal.

Viele Grüße


Moderiert von user profile iconTh69: Topic aus Multimedia / Grafik verschoben am Mo 20.05.2013 um 14:25

Moderiert von user profile iconNarses: Beiträge zusammengefasst

O.k., über DeviceCaps kann ich die Auflösung in Pixeln ermitteln:

ausblenden Delphi-Quelltext
1:
2:
GetDeviceCaps(printer.handle, PHYSICALWIDTH);
GetDeviceCaps(printer.handle, PHYSICALHEIGHT);

Gruß
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mo 20.05.13 19:44 
user profile iconrushifell hat folgendes geschrieben Zum zitierten Posting springen:
O.k., über DeviceCaps kann ich die Auflösung in Pixeln ermitteln:

Das ist aber nicht der bedruckbare Bereich. Den Rand ermittelst Du mit PHYSICALOFFSETX und PHYSICALOFFSETY. HORZRES und VERTRES liefern die Abmessungen des bedruckbaren Bereichs.

Siehe dazu: msdn.microsoft.com/e...144877(v=vs.85).aspx

Statt StretchDraw solltest Du StretchDIBits verwenden. Einige Drucker hatten mit StretchDraw damals so ihre Probleme. Ob das heute auch noch gilt, weiß ich nicht.

Beispiel siehe hier: www.swissdelphicente.../showcode.php?id=744

Statt mit Pixeln kann man auch mit Zehntelmillimetern arbeiten und auch den Nullpunkt nach oben links verlegen. Beispiel siehe meine Sourcen: www.entwickler-ecke....ndruck_111318,0.html

Dort findest Du auch etwas zum Drucken von RichEdit-Inhalten, bei denen mit Twips gearbeitet werden muß.

Für diesen Beitrag haben gedankt: rushifell
rushifell Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Di 21.05.13 09:53 
Vielen Dank :-)
Sollte öfter ins MSDN reinschauen.

Macht es Sinn, mit Filtern zu skalieren, oder reicht StretchDIBits aus?
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Di 21.05.13 10:16 
user profile iconrushifell hat folgendes geschrieben Zum zitierten Posting springen:
Macht es Sinn, mit Filtern zu skalieren, oder reicht StretchDIBits aus?

Es kommt immer darauf an, welche Größe die Bitmap hat, was dargestellt wird und wie stark das vergrößert werden muß. Da hilft nur ausprobieren. Ansonsten schau mal hier nach: www.efg2.com/Lab/index.html
Vielleicht ist da was Passendes dabei.

Für diesen Beitrag haben gedankt: rushifell
rushifell Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: So 26.05.13 14:59 
Danke für den Link, das sieht gut aus :-)

Viele Grüße