Hallo zusammen,
für ein Projekt in der Uni habe ich eine Druckfunktion innerhalb eines Bildbearbeitungsprogramms eingebaut. Das Ganze funktioniert soweit recht gut. Wenn ich jedoch bei den Druckeinstellungen die Druckqualität "Schnell" auswähle, wird das Bild plötzlich nicht mehr in der Originalgröße ausgedruckt, sondern etwa 4-fach vergrößert, sodass nur noch 1/4 des Ursprungsbildes zu erkennen ist.
Mein Drucker ist ein Canon MP 800. Auf anderen Canon-Druckern scheint es dasselbe Problem zu sein. Leider kann ich das nicht auf Druckern einer anderen Marke überprüfen.
Hier mal mein Code:
Übrigens haben die beiden if-Abfragen, die sich auf die Breite bzw. Höhe beziehen nichts damit zu tun, da der Fehler auch schon vor deren Einführung eingetreten ist. Die sind nur dafür da, dass die Bilder auch ihr usprüngliches Seitenverhältnis beibehalten.
Vielen Dank schonmal in Voraus,
Bastian
für ein Projekt in der Uni habe ich eine Druckfunktion innerhalb eines Bildbearbeitungsprogramms eingebaut. Das Ganze funktioniert soweit recht gut. Wenn ich jedoch bei den Druckeinstellungen die Druckqualität "Schnell" auswähle, wird das Bild plötzlich nicht mehr in der Originalgröße ausgedruckt, sondern etwa 4-fach vergrößert, sodass nur noch 1/4 des Ursprungsbildes zu erkennen ist.
Mein Drucker ist ein Canon MP 800. Auf anderen Canon-Druckern scheint es dasselbe Problem zu sein. Leider kann ich das nicht auf Druckern einer anderen Marke überprüfen.
Hier mal mein Code:
Code:
PrinterJob prjob;
public void drucken () {
if (this.prjob == null) {
prjob = PrinterJob.getPrinterJob();
prjob.setPrintable(this);
}
if (prjob.printDialog() == false)
return;
try {
prjob.print(); }
catch (Exception e){
System.out.println("Fehler beim Drucken: " + e.toString()); }
}
public int print( Graphics g, PageFormat pf, int pageIndex )
throws PrinterException {
double imageFormat;
double imageWidth = this.bi.getWidth();
double imageHeight = this.bi.getHeight();
double paperWidth = pf.getImageableWidth();
double paperHeight = pf.getImageableHeight();
if ( pageIndex > 0 )
return Printable.NO_SUCH_PAGE;
if (imageWidth > paperWidth) {
imageFormat = imageHeight / imageWidth;
imageWidth = paperWidth;
imageHeight = imageFormat * paperWidth;
System.out.println("Breite zu groß -> verkleinert");
}
if (imageHeight > paperHeight) {
imageFormat = imageWidth / imageHeight;
imageHeight = paperHeight;
imageWidth = imageFormat * paperHeight;
System.out.println("Hoehe zu groß -> verkleinert");
}
g.drawImage(this.bi, 0, 0, (int)imageWidth, (int)imageHeight, null);
return Printable.PAGE_EXISTS;
}
Übrigens haben die beiden if-Abfragen, die sich auf die Breite bzw. Höhe beziehen nichts damit zu tun, da der Fehler auch schon vor deren Einführung eingetreten ist. Die sind nur dafür da, dass die Bilder auch ihr usprüngliches Seitenverhältnis beibehalten.
Vielen Dank schonmal in Voraus,
Bastian