Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Drucken mit Maßeinheiten (cm) (https://www.delphipraxis.net/84132-drucken-mit-masseinheiten-cm.html)

Andreas L. 11. Jan 2007 20:52


Drucken mit Maßeinheiten (cm)
 
Hi,
wenn ich auf das Druckercanvas zeichne mache ich dies ja in Pixeln. Wie kann ich, z. B. ein Bild, in Zentimeter (cm) ausrucken? Pixel kann man ja nicht in cm umrechen... Wie könnte ich das dann realisieren?

SirThornberry 11. Jan 2007 20:57

Re: Drucken mit Maßeinheiten (cm)
 
mit der Funktion SetMapMode kannst du das umstellen.

Pfoto 11. Jan 2007 21:07

Re: Drucken mit Maßeinheiten (cm)
 
Letztendlich hängt die Ausgabe-Größe / Auflösung eines Bildes
von den ppi / dpi ab, die darauf angewandt werden.

ppi = Pixel per Inch (beim Screen verwendet)
dpi = dots per Inch (beim Druck verwendet)


Hier mal ein Vergleich der Ausgabegröße,
wenn bei einem Bild von 2000 x 2000 Pixel die PPI geändert werden:

72 ppi : 70,56 cm
150 ppi : 33,87 cm
300 ppi : 16,93 cm

Dabei entsprechen 1 Zoll/Inch = 2,54 cm


Ein Ausdruck in guter Qualität (Industriedruck) benötigt
ca. 300ppi - auf einem Tintenstrahldrucker können es auch weniger sein.

Der richtige / gewünschte Ausdruck ist also immer ein Zusammenspiel
aus Auflösung und Ausmaßen des Bildes.


Nur so zur Info ;-)

Gruß
Pfoto

Reinhard Kern 12. Jan 2007 01:41

Re: Drucken mit Maßeinheiten (cm)
 
Zitat:

Zitat von Andreas L.
Hi,
wenn ich auf das Druckercanvas zeichne mache ich dies ja in Pixeln. Wie kann ich, z. B. ein Bild, in Zentimeter (cm) ausrucken? Pixel kann man ja nicht in cm umrechen... Wie könnte ich das dann realisieren?

Natürlich kannst du das, du must nur den Drucker fragen, wieviele Pixel / cm er hat. Das geht mit
Delphi-Quellcode:
xdpi := GetDeviceCaps (Printer.Handle, LOGPIXELSX);
das sind zwar Pixel/Zoll (dpi = Dot per Inch), aber das kann kein ernsthaftes Hindernis sein.

Grundsätzlich kannst du das selber rechnen, oder du setzt einen anderen Windows-Mapping-Mode ein. Der Umgang damit ist aber nicht ganz trivial, ich habe daher bisher immer selbst umgewandelt, und zwar (wichtig!) nur an einer einzigen Stelle in der Software.

Gruss Reinhard

popo2006 12. Jan 2007 02:01

Re: Drucken mit Maßeinheiten (cm)
 
Wenn Du den Drucker fragst, wieviele dpi (Dots per Inch) er kann, kannst Du diesen Wert leicht in sonstwas umrechnen.

Allerdings solltest Du dabei beachten, dass viele Drucker unterschiedliche Werte für ihren dpi-Wert zurückliefern.

Je nachdem, ob Du deren s/w- oder Farbdruck abfragst.

Alte Epsons machen Dir dabei die Hölle heiß, falls sie nicht als Standarddrucker eingestellt sind.

mfg

Luckie 12. Jan 2007 10:21

Re: Drucken mit Maßeinheiten (cm)
 
Hat eigentlich irgendjemand das Posting von Sir Thornberry gelesen? :?

bernau 12. Jan 2007 10:43

Re: Drucken mit Maßeinheiten (cm)
 
Zitat:

Zitat von Luckie
Hat eigentlich irgendjemand das Posting von Sir Thornberry gelesen? :?

Ausserdem: Der Hinweis aus SetMapMode ist zwar korrekt um das Umrechnen von inch nach cm zu übergehen. Dennoch ist der Hinweis von "Reinhard Kern" auf GetDeviceCaps IMHO genau so von Bedeutung.

Ich finde alle bisherigen Post haben auch etwas zum Hintergrundwissen beigetragen. Und das ist gut so.


Gerd

Mavarik 12. Jan 2007 10:54

Re: Drucken mit Maßeinheiten (cm)
 
Zitat:

Zitat von bernau
Ich finde alle bisherigen Post haben auch etwas zum Hintergrundwissen beigetragen. Und das ist gut so.
Gerd

Genau... DDT Rules... :-)

Ansonsten...

[VORKAU=ON]

Delphi-Quellcode:
    LogX          := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
    LogY          := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
    XMax          := GetDeviceCaps(Printer.Handle, PHYSICALWIDTH);
    YMax          := GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT);
    DruckX        := Printer.PageWidth;
    DruckY        := Printer.PageHeight;
    Rand_Links    := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
    Rand_Oben     := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
und eine Umrechnung als Beispiel...

Delphi-Quellcode:
function mmtoxpix(X:Extended):integer;
  begin
    X := X * logX / 25.4;
    result := trunc(X)-Rand_Links;
  end;

function .mmtoypix(Y:Extended):integer;
  begin
    Y := Y * logy / 25.4;
    result := trunc(Y)-Rand_oben;
  end;

[VORKAU=OFF]

Frank :coder:

Reinhard Kern 12. Jan 2007 15:42

Re: Drucken mit Maßeinheiten (cm)
 
Zitat:

Zitat von Luckie
Hat eigentlich irgendjemand das Posting von Sir Thornberry gelesen? :?

Hallo Luckie,

hättest du mein Posting ganz gelesen, hätte sich die Frage erübrigt.

Mapping Modes unter Windows sind nicht so ganz trivial, man bekommt es dann mit den Beziehungen zwischen Window und Viewport zu tun, was sehr leistungsfähig ist, aber das muss man auch erstmal verstehen. Daher meine Meinung, dass auch die Umrechnung in der eigenen Software eine bedenkenswerte Alternative ist - 2 Befehle an der geeigneten Stelle erledigen das.

Mag sein, dass du der Meinung bist, SetMapMode löst alle Probleme der Welt, ich bin anderer Meinung, und soviel muss hier auch noch erlaubt sein.

Gruss Reinhard

Andreas L. 12. Jan 2007 16:03

Re: Drucken mit Maßeinheiten (cm)
 
Danke für eure Antworten. Ich werde beide Routinen ausprobieren. Melde mich später wieder :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 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 by Thomas Breitkreuz