Entwickler-Ecke

Multimedia / Grafik - Bitmap skaliert auf A4 ausdrucken


rushifell - Mo 20.05.13 13:36
Titel: Bitmap skaliert auf A4 ausdrucken
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.


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:


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

Gruß


Gerd Kayser - 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: http://msdn.microsoft.com/en-us/library/windows/desktop/dd144877(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: http://www.swissdelphicenter.ch/de/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: http://www.entwickler-ecke.de/topic_CDEtikettendruck_111318,0.html

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


rushifell - 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 - 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: http://www.efg2.com/Lab/index.html
Vielleicht ist da was Passendes dabei.


rushifell - So 26.05.13 14:59

Danke für den Link, das sieht gut aus :-)

Viele Grüße