Screenshot höhere Qualität?

Fabse

Aktives Mitglied
Hi,

ich mache mit der Robot Klasse einen Screenshot von meinem Bildschirm. Allerdings ist die Qualität doch deutlich schlechter als wenn ich auf die "Druck" Tase drücke.

Gibt es eine andere Funktion die die gleiche Qualität liefert wie die Druck taste?

Ich kann leider kleine Zahlen nicht erkennen auf dem Screenshot...

Dnake :)
 

Evil-Devil

Top Contributor
Zunächst einmal erzeugt die Robot Klasse das Rectangle das du anfordest. Also ein 1:1 Abbild. Wenn du jetzt dein Bild zb. als JPG speicherst, dann ist das komprimiert und verlustbehaftet. Je nachdem wie hoch die Kompression eingestellt ist wird das Bild mehr oder weniger qualitativ hochwertig.
 
S

SlaterB

Gast
welchen Code hast du denn?
Robot liefert doch wohl zunächst ein Bild in den Speicher, vielleicht mit GUI anschauen,
wie man es dann speichert kann noch einen großen Unterschied machen

ich hab am mal eben schnell kopierten Code
> BufferedImage bi = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
> ImageIO.write(bi, "jpg", new File("screenshot.jpg"));

allerdings nicht viel auszusetzen..
 

Fabse

Aktives Mitglied
Java:
Robot alarm = null;
					try {
						alarm = new Robot();
					} catch (AWTException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
						System.out.println("Fehler Robot");
					}
					BufferedImage bild = new BufferedImage(1920,1080,1);
					Rectangle rec = new Rectangle(0,0,1920,1080);
					
					bild = alarm.createScreenCapture(rec);
					
					try {
						ImageIO.write(bild, "JPG", new File("C:\\Users\\Fabian\\Desktop\\Unbenannt-1.jpg"));

Das Bild ist dann gerade mal so 100kb groß.
Wenn ich mit druck nen Screen machen und den bei Photoshop auf maximal Qualität stelle bin ich bei 700kb. Aber so viel brauch ich gar nicht, ich brauchs nur ein bissl besser. 200kb sollten langen. Ich versuchs mal als png.

EDIT: bei png wird das Bild nur größer 1,7m aber die Quali ist gleich. Ich greife über die Dropbox auf den link zu und zoomen dann mit meinem iphone! Lege ich nen "manuellen" Screenshot in die Dropbox seh ich alles, aber wenn Java den dort einfügt seh ich nicht alles :noe:
 
Zuletzt bearbeitet:
S

SlaterB

Gast
hier ein Code, der bei mir beim Ausprobieren ein höherwertiges Jpg liefert,
sowohl in Dateigröße als auch Qualität, Gekräusel-Pixel um Buchstaben verschwinden,
auf grundsätzliche Lesbarkeit hat das aber kaum Auswirkung, die schwarzen Text-Pixel konnte man so oder so lesen..

Save a JPG with a specified quality

die ersten 14 Zeilen, die in ein BufferedImage malen musste ich aber entfernen, sonst gibts einen Rotstich fürs gesamte Bild,
vorest nicht kritisch, wenn man den Parameter als BufferedImage übergibt, funktioniert es direkt


-----

Suche: java save image high quality
bzw ähnliches
 

Anhänge

  • screen1.png
    screen1.png
    51,9 KB · Aufrufe: 63
Zuletzt bearbeitet von einem Moderator:

Fabse

Aktives Mitglied
Hey,

jetzt muss ich noch mal nachhaken... die ersten 14 Zeilen, die in das BufferedImage schreiben?
Die seh ich nicht ???:L

Java:
BufferedImage bi = new BufferedImage(
                icon.getIconWidth(), 
                icon.getIconHeight(),
                BufferedImage.TYPE_INT_ARGB
            );
            Graphics2D graphics2D = bi.createGraphics();
            graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            graphics2D.drawImage(image, 0, 0, 
                icon.getIconWidth(), 
                icon.getIconHeight(),
                null
            );

Wenn ich das alles wegnehme gehts natürlich nicht weil bi fehlt!

Ansonsten sieht dein Screen schon gut aus, das könnte genau das sein was ich brauche, da ich mit dem iphone auf dem Bild zoome und kleine zahlen erkennen muss.

Wäre toll wenn du mir noch mal kurz helfen könntest :)
 
S

Spacerat

Gast
Warum verwendest du der einfachheit halber nicht das PNG-Format? Das komprimiert verlustfrei.
 

Fabse

Aktives Mitglied
Warum verwendest du der einfachheit halber nicht das PNG-Format? Das komprimiert verlustfrei.

Das Bild ändert sich komischerweise nicht :bahnhof: es wird nur über 1Mb groß, aber die Quali ist gleich "schlecht". Muss wohl daran liegen "wie" Java den Screen macht!?

Das andere Programm bekomm ich immer noch nicht ans laufen ohne Rotstich :mad:

Hab schon alles mögliche geändert was für mich Sinn macht alles in BufferedImage aber es bleibt einfach rot!
 
S

SlaterB

Gast
wie gesagt die 14 Zeilen entfernen,
Fehlermeldung BufferedImage bi fehlt
-> Methodenkopf in

> public void saveImage(BufferedImage bi, File file, int quality)
statt
> public void saveImage(Image image, File file, int quality)
ändern und gut ist

----

schau dir mein hochgeladenes Bild an, da sieht man in der Vergrößerung von Paint jeden Pixel einzeln,
besser geht nicht bei einer bestimmten Bildschirmauflösung, von Low zu High ändert sich auch nur etwas Gekräusel,
die schwarzen Pixel sind so oder so da, man kann erkennen dass beim 't' von 'Edit' unten rechts ein Pixel sitzt usw.

was genau ist für dich ein schlechtes oder gutes Bild, unlesbar oder lesbar?
wie sieht es hinsichtlich Pixeln aus?
sind noch irgendwelche Glättungseffekte oder so einzubeziehen?


> BufferedImage bi = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
> ImageIO.write(bi, "png", new File("screenshot.png"));

speichert bei mir auch in perfekt, kleiner als ein jpg,
 

Fabse

Aktives Mitglied
Super jetzt funktioniert es :)

Ich weiß weit reinzoomen in das Bild weil ein paar Zahlen recht klein sind und dann etwas undeutlich waren, die wollte ich nen bissl deutlicher haben, aber jetzt gehts. Dank dir :)
 

Oben