winduff hat geschrieben:Ja danke für eure Tipps, habt euch ja richtig Zeit genommen
Ja ich denke mit den Angaben werde ich zur guten + richtigen Lösung kommen

Mooooment, wir sind noch nicht fertig...
Drucken unter PureBasic! Das Abenteuer geht weiter...
Nachdem ich schon das Drucken von Bildern aus Grafikprogrammen
erleutert habe, insbesondere den Einfluss der Auflösung des Bildes,
kommen wir nun zu PureBasic. Hier verhält sich das Drucken von Bildern
doch ziemlich anders als gewohnt. Ich habe mich eben erst mit dem
Drucken von Bildern aus PureBasic heraus beschäftigt. Sollte ich hier also
Fehler verbreiten bitte ich um Nachsicht und Korrektur.
Wie sich gezeigt hat ignoriert PureBasic die Auflösung des Bildes völlig und
druckt ausschliesslich mit der Auflösung des Druckers. Dieses Vorgehen
hat leider einige Haken. Unter anderem können wir nicht so ohne weiteres
die Druckgrösse aus den Bilddaten ermitteln.
Zuerst mal kennen wir die Auflösung des Druckers nicht. Klar wir könnten
im Handbuch nachschauen, doch wer will das den Nutzern seines
Programmes antun. Glücklicherweise lässt sich alles was wir brauchen
berechnen.
AusgabeBreite = PrinterPageWidth()
AusgabeHoehe = PrinterPageHeight()
Diese beiden Abfragen liefern uns die Breite und Hoehe des Zeichen-
Bereiches unseres Druckers zurück.
Als Beispiel nehme ich meinen Epson Stylus Photo 1270. Für DinA4 erhalte
ich 2892 * 3969 Pixel. Für DinA3 4125 * 5713 Pixel. Diese Angaben
beziehen sich - wie schon in der Hilfe zu PureBasic steht - auf den nur
druckbaren Bereich. Wie kommen wir jetzt zur Auflösung mit der gedruckt
wird? Zunächst müssen wir herausfinden wie gross dieser Bereich in mm
bei unserem Drucker ist, und das ohne in's Handbuch zu schauen.
Wir wissen:
ein Blatt Papier DinA4 ist 210mm * 297mm gross
der druckbare Bereich beträgt (bezogen auf meinen Drucker) 2892 * 3969
Pixel
das Seitenverhältnis DinA4 297mm/210mm = 1,414
das Seitenverhältnis Druckbereich 3969pixel/2892pixel = 1,372
Was hilft uns das? Wir setzen jetzt die Verhältnisse in's Verhältnis, dann
sehen wir wie es weiter geht.
1,372/1,414 = 0,970
Aha, der Druckbare Bereich z.B. für die Breite (wir nehmen hier mal die
Breite weil dort meistens die kleinsten Ränder sind, und das reicht uns
erstmal für diese Anleitung), beträgt also 97% vom DinA4 Blatt. Da
rechnen wir jetzt weiter...
X-Druckbereich = 210mm * 0,97 = 203,76 mm
Laut Handbuch sind es beim Epson 204 mm, also ist die Berechnung
hinreichend genau. Jetzt schnell noch die Höhe, aber da müssen wir etwas
aufpassen denn meistens ist der untere Druckrand grösser als die anderen
Ränder, aber da wir ja wissen das die Y-Richtung 1,372 * der X-Richtung
entspricht ergibt sich...
Y-Druckbereich = 203,76 * 1,372 = 279,56 mm
Laut Handbuch sind es 280 mm, Bingo!
Jetzt kommen wir zur Auflösung mir der gedruckt wird.
Umrechnung in Inch = X-Druckbereich in mm/25,4mm = 203,76mm/25,4mm = 8,022 inch
Brauchen wir zwar nicht aber trotzdem berechnen wir auch die Y-Richtung.
Umrechnung in Inch = Y-Druckbereich in mm/25,4mm = 279,56mm/25,4mm = 11,006 inch
AuflösungX = X-Druckbereich in Pixel/25,4 = 2892pixel/8,022inch = 360,509ppi
Die Nachkommastellen abgeschnitten also 360ppi
Die Gegenprobe in Y-Richtung.
AuflösungY = Y-Druckbereich in Pixel/25,4 = 3969pixel/11,006inch = 360,622ppi
Die Nachkommastellen abgeschnitten also ebenfalls 360ppi. Man könnte
natürlich auch runden aber das Ergebnis ist hinreichend genau. Wir
brauchen diesen Wert also nur einmal für z.B. die X-Richtung berechnen
Um zu sehen ob wir damit richtig liegen, habe ich ein Bild z.B. mit
PicturePublisher auf eine Auflösung von 360 gesetzt und gedruckt. Der
Ausdruck ist genau so gross wie der Ausdruck des Bildes von PureBasic
aus, also 360ppi ist richtig.
Kommen wir zu Nachteil von PureBasic beim Drucken. Um nun Bilder in
verschiedenen Grössen zu Papier zu bringen hilft es uns nichts, einfach die
Auflösung des Bildes zu verändern, wie wir es in einem Grafikprogramm
tun können, um somit die Grösse des Druckpunktes zu steuern. Da
PureBasic stur mit der Auflösung des Druckers druckt, sind wir gezwungen
das Bild selbst zu skalieren. Damit handeln wir uns evtl. Qualitätsverluste
ein und/oder müssen mit riesigen Dateien hantieren. Um ein Foto auf dem
vollen Duckbereich von 204mm x 280 mm auszugeben, müssen wir das
Bild bei rund 8 x 11 inch auf: 8 * 360 = 2880 pixel und 11 * 360 = 3960
pixel also auf rund 11 MegaPixel aufblähen. Dabei würden schon rund 3,5
MegaPixel für einen tadelosen Ausdruck reichen (bei 200ppi).
Wir brauchen also - über den Daumen gepeilt - eine 11MP-Kamera für ein
Foto in ca. DinA4 oder wir müssen skalieren. Natürlich ist das jetzt
bezogen auf meinen Drucker. Bei anderen Geräten, besonders welche mit
noch höherer Auflösung, brauchen wir dann evtl. noch grössere Bilder.
Das sollte IMHO bei PureBasic noch mal verbessert werden.
Auf jeden Fall können wir uns nun mit diesem Wissen und den jeweils
ermittelten Daten, jede benötigte Bildgrösse für die gewünschte
Druckgrösse errechnen.
Hier noch ein Beispiel wie es geht. (Die obigen Daten müssen natürlich für
jeden Drucker individuell errechnet werden)
Meine 2MPixel Digicam macht Bilder der Grösse 1200 * 1600 (IXUS V2).
Jetzt möchte ich einen Ausdruck haben der ca. 10 * 15 cm gross ist.
10cm/2,54 = 3,937 inch
15cm/2,54 = 5,906 inch
bei 360dpi macht das 3,937inch * 360 = 1417,32pixel und 5,906inch *
360 = 2126,16pixel. Ich brauch also rund 1417 * 2126 Pixel (was in etwa
einer 3 MP-Kamera entspricht). Ich muss also mein Bild skalieren
(künstliche Pixel hinzufügen) obwohl ich mit Bildern der Kamera (bei
200ppi) sonst beste Ausdrucke in 15cm * 20cm erreiche.
Ich hoffe die Zusammenhänge sind klar geworden und ich habe keinen
groben Fehler gemacht.
Ansonsten schönes Wochenende...
