Bild Drucken

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag von winduff »

An sich ist deine Idee ganz gut, danke für deine Bemühung ;-)

Allerdings könnte es unter umständen leichter mit APIs sein, mal sehn hab noch nicht geschaut ;-)

Die liebe logik des Druckens... Bleibt mir nur dass ich noch nie die Druckfunktion benutzt habe ^^ Aber ja, deine lösung funktioniert und ist auch ein weg <)
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Die liebe logik des Druckens...

ist doch eigentlich nicht schwierig. Dein Monitor hat i.d.R. eine Auflösung von
90 DPI, sprich: Pro Inch (25.4 Millimeter) werden 90 Dots dargestellt. Dein
Drucker kann bei einer Auflösung von 600 DPI also pro Inch 600 Dots
darstellen. Das sind ca. 6.67 mal mehr als Dein Monitor schafft. Im
Umkehrschluss heisst das dann doch, dass Bilder, die du ausdruckst, um den
Faktor 6.67 kleiner sind. Wenn Du also die Bilder vor dem Ausdruck um
diesen Faktor vergrösserst, dann dürfte es wieder stimmen.

So habe ich das zumindest verstanden

Grüße ... Kiffi

// Edit: Hier noch mal ein DPI-Rechner, der das verdeutlicht:

http://www.hdri.at/dpirechner/dpirechner.htm

gib mal im unteren Teil (Berechnung der Ausgabegröße) 100 * 100 Pixel
bei 90 und bei 600 dpi ein.
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ein Monitor unter Windows hat 96 DPI, Dots per Inch, dieser Wert ist
unabhängig von der Größe. Abhängig wäre PPI, Points per Inch.
ScreenDesigner Rechnen oft mit 72 DPI (vor allem rechnen die Adobe
Programme intern alle so)
Und nächste Woche kommen dann die Twips dran, um die Verwirrung zu
vervollständigen :lol:
Aber verstanden hab ich es auch nicht so ganz :lol:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Jason
Beiträge: 123
Registriert: 06.01.2005 17:47

Beitrag von Jason »

winduff hat geschrieben:Die liebe logik des Druckens... Bleibt mir nur dass ich noch nie die Druckfunktion benutzt habe ^^ Aber ja, deine lösung funktioniert und ist auch ein weg <)
Also um das mal klar zu machen.
Für das Drucken eines Bildes sind 3 Grössen von Bedeutung.
Pixel in X-Richtung, Pixel in Y-Richtung und die Auflösung.
Z.B. 800 x 600 x 200
Für die Darstellung auf dem Monitor ist der Wert der Auflösung ohne
Bedeutung. Tatsächlich können wir diesen Wert in einem Grafikprogramm
ändern ohne das sich die Darstellung auf dem Monitor ändert. Hier
entspricht (bei 100% Darstellung) ein Pixel des Bildes einem Pixel auf dem
Monitor. Da sich die Grösse eines Pixels auf dem Monitor nicht ändert
(wenn wir nicht die Grafikkartenauflösung ändern) brauchen wir also mehr
Pixel in X und Y-Richtung, wenn das Bild grösser dargestellt werden soll.
Soll das Bild auf dem Monitor kleiner erscheinen, brauchen wir weniger
Pixel. Wir sprechen hier genau genommen bei der Darstellung auf dem
Monitor von ppi = pixel per inch.

Um zu sehen mit welcher Auflösung die Monitordarstellung arbeitet kannst
Du einfach mit der Taste DRUCK ein Bildschirmfoto machen und in ein
Grafikprogramm laden (aus der Zwischenablage). Dort kann man sich
dann die Daten des Bildes anzeigen lassen z.B. 1024 x 768 x 72.

Etwas gänzlich anderes ist die Ausgabe eines Bildes auf einem Drucker.
Hier spielt die Auflösung des Bildes eine entscheidende Rolle. Über den
Wert der Auflösung können wir nämlich die Grösse eines Druckpunktes
bestimmen. Wir sprechen hier auch von den berühmten aber meist in
falschem Zusammenhang benutzten dpi = dots per inch (Druckpunkte pro
Inch). Also Bild auf dem Monitor = ppi, Bild auf dem Drucker = dpi.

Wir können uns den Einfluss der Auflösung auf die Druckpunktgrösse in
einem Grafikprogramm ansehen das über eine Druckvorschau verfügt.

Erhöhen wir die Auflösung von z.B. 100 auf 200 wird das Bild in der
Vorschau (und im Druck kleiner) und umgekehrt. An dem Bild selber
ändert sich nichts (keine Änderung der Pixelzahl und keine Änderung der
Dateigrösse).

Nun etwas Rechnerei damit der Zusammenhang klar wird.
Wir haben ein Bild von 800 x 600 Pixeln die Auflösung soll 72dpi sein.
800 pixel /72dpi=11,11 inch (ein Inch = 2,54 cm oder 25,4 mm)
Jetzt noch schnell in cm gewandelt 2,54 X 11,11 = 28,22 cm.
Und 600 pixel/72dpi=8,33 inch das sind 2,54 X 8,33 = 21,16 cm.

Das ist fast ein Bild in DinA4 (21 x 29,7 cm). Ich sage aber schon jetzt ,
das Bild wird ziemlich gruselig aussehen denn ein Pixel des Bildes hat
eine Grösse auf dem Papier von: 25,4mm/72dpi= 0,353 x 0,353 mm
Das sieht schon pixelig aus.

Um ein Bild in guter bis bester Qualität zu drucken brauchen wir so von
200 bis 300 dpi. Da wir jetzt alles begriffen haben können wir uns jede
benötigte Bildgrösse oder zu erwartende Bildgrösse für den Druck
ausrechnen.

Mein Drucker (Epson Stylus Photo 1270) hat einen druckbaren Bereich von
204mm x 280mm (Bei DinA 4). Um auf diese Fläche in voller Grösse ein
Foto in guter Qualität zu drucken, brauche ich also ein Bild der Grösse:
204mm/25,4mmpi=8,03 inch. Bei 200ppi macht das dann 8,03 inch X 200
= 1606 Pixel in X-Richtung, und 280mm/25,4mmpi = 11,02 inch und 11,02
inch X 200 ppi = 2204 in Y-Richtung (genau 2204,7 was aber Wurst ist).

Ein Bild der Grösse 1606 X 2204 bei 200ppi passt also genau auf ein DinA
4 Blatt. (Unter Berücksichtigung der nicht druckbaren Ränder).

Die Auflösung des Druckers spielt hier für die Bildgrösse übrigänse keine
Rolle. Das Bild wird auf einem 720 dpi Drucker genau so gross gedruckt
wie auf einem 1440 dpi Drucker.

Wollen wir ein Foto in 10cm x 15cm ausdrucken, können wir jetzt ganz
präzise sagen welche Werte das Bild haben muss.

10cm in Inch sind 10cm/2,54cminch=3,937inch
und
15cm in Inch sind 15cm/2,54cminch=5,905inch
Wir sind klever und wollen einen schönsten Ausdruck erhalten deshalb
entscheiden wir uns für eine Auflösung von 300dpi.

3,937inch X 300dpi = ca. 1181 Pixel
5,905inch X 300dpi = ca. 1771 Pixel

1181Pixel X 1771Pixel = 2091551 Pixel was ca. einer 2MP Kamera
entspricht.

Ich habe mir mal zwei Tabellen erstellt, eine für DINA3 und eine für DinA4
(als PDF gespeichert). Von 41 dpi bis 900 dpi. Ich kann so sehr schnell
bestimmen wie gross eine Grafikdatei sein muss wenn ich z.B. ein Layout
für eine bestimmte Aufgabe brauche oder wenn mal wieder eine Monster-
grosse-Grafik rein kommt, die ich auf A3 quetschen muss.

So, ich hoffe ich habe alle Klarheiten beseitigt, und mich deutlich genug
ausgedrückt... :wink:

Der ganze Sermon hier bezieht sich natürlich auf das übliche Drucken mit den diversen Programmen. Wie sich das unter PureBasic darstellt muss ich mir selbst erst mal ansehen. :wink:
Zuletzt geändert von Jason am 31.08.2006 11:45, insgesamt 1-mal geändert.
Der Rest ist Schweigen!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Jason hat geschrieben:Um zu sehen mit welcher Auflösung die Monitordarstellung arbeitet kannst
Du einfach mit der Taste DRUCK ein Bildschirmfoto machen und in ein
Grafikprogramm laden (aus der Zwischenablage). Dort kann man sich
dann die Daten des Bildes anzeigen lassen z.B. 1024 x 768 x 72.
au contrair, mon ami.

in einem grafikprogramm wirst du idR lediglich die bit-tiefe des bildes angezeigt bekommen, also 1024x768x24
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Jason
Beiträge: 123
Registriert: 06.01.2005 17:47

Beitrag von Jason »

Kaeru Gaman hat geschrieben:
Jason hat geschrieben:Um zu sehen mit welcher Auflösung die Monitordarstellung arbeitet kannst
Du einfach mit der Taste DRUCK ein Bildschirmfoto machen und in ein
Grafikprogramm laden (aus der Zwischenablage). Dort kann man sich
dann die Daten des Bildes anzeigen lassen z.B. 1024 x 768 x 72.
au contrair, mon ami.

in einem grafikprogramm wirst du idR lediglich die bit-tiefe des bildes angezeigt bekommen, also 1024x768x24
Nö, die Aussage ist falsch. Test mit einigen Programmen:
PicturePublisher, PhotoLine, InfanView, Paint Shop Pro, PhotoShop. Alle diese Programme zeigen das an, also Augen auf.
Der Rest ist Schweigen!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> also Augen auf.

evtl. hast du andere preferences, oder was auch immer, aber:

Bild

deswegen solltest du dich nicht auf eine allgemeingültige aussage versteifen,
wo nichts allgemeingültig ist, und vor allem nicht patzig werden.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Jason
Beiträge: 123
Registriert: 06.01.2005 17:47

Beitrag von Jason »

Kaeru Gaman hat geschrieben:> also Augen auf.

evtl. hast du andere preferences, oder was auch immer, aber:

Bild

deswegen solltest du dich nicht auf eine allgemeingültige aussage versteifen,
wo nichts allgemeingültig ist, und vor allem nicht patzig werden.
Sorry falls ich patzig geklungen habe, aber ich gehe seit Jahren so mit den
Bildaten und Programmen um und kann nun beim besten willen nicht
einsehen warum das plötzlich nicht gehen sollte. Wenn Du jetzt in
IrfanView mal auf das kleine i mit rotem Kreis drücken würdest (in der
Werkzeugleiste) dann siehst Du ein Fenster in dem alle möglichen
Angaben zum Bild geliefert werden. Da steht auch die Auflösung drin, die
man sogar ändern kann.
Der Rest ist Schweigen!
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag von winduff »

Ja danke für eure Tipps, habt euch ja richtig Zeit genommen :allright:

Ja ich denke mit den Angaben werde ich zur guten + richtigen Lösung kommen :)
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
Jason
Beiträge: 123
Registriert: 06.01.2005 17:47

Beitrag von Jason »

winduff hat geschrieben:Ja danke für eure Tipps, habt euch ja richtig Zeit genommen :allright:

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... 8)
Der Rest ist Schweigen!
Antworten