ich ein Bild mit einer benutzerdefinierten Palette (mit anderen Worten einer benutzerdefinierte Farbmodell) zu schaffen:BufferedImage deaktiviert das Dithering beim Reduzieren von Farben mit einem benutzerdefinierten ColorModel?
BufferedImage img = new BufferedImage(orgImg.getWidth(), orgImg.getHeight(),
BufferedImage.TYPE_BYTE_INDEXED,
cm);
Graphics2D g2 = img.createGraphics();
g2.drawImage(orgImg, 0, 0, null);
g2.dispose();
Beachten Sie, dass der „cm“ Variable ein Farbmodell mit einer Palette von 256 Farben meiner Gewohnheit ist.
Die Variable "orgImg" ist ein vollfarbiges (24 großes argb) Bild.
Der obige Code führt zu einer Kopie von "orgImg" mit 256 Farben unter Verwendung der im Farbmodell definierten Palette.
Das funktioniert gut.
Aber Java verwendet Dithering, um Farben zu reduzieren. Ist es möglich, dieses Dithering zu deaktivieren?
Beachten Sie, dass ich meine eigene Palette verwenden muss, damit die endgültigen Bilder einer bestimmten Farbpalette entsprechen.
renderinghints Mit funktioniert nicht in diesem speziellen Fall (in anderen/den meisten Fällen es funktioniert), der KEY_DITHERING ignoriert. Es gibt einige Themen im Internet zu diesem Problem, aber keine gibt es eine Lösung, die eine gute Leistung hat. Probieren Sie es einfach aus. –
Ich habe gerade gesehen, dass du deine Frage editiert hast ;-) Ich werde dir deine Klassen ansehen, sie sehen gut aus, weil die Verwendung von Rastern gut für die Performance ist. Ich werde Sie auf dem Laufenden halten! –
Prost @HaraldK, es hat eine Weile gedauert, um die Dinge heute Morgen herauszufinden, aber nachdem du deine Abhängigkeiten gefunden hast, lief alles glatt. Ich habe CopyDither mit meinem Farbmodell verwendet und eine nicht geditherte Version erstellt. Und es ist auch ziemlich schnell, mein hacky setRgb (getRgb) für jedes Pixel ist 50% langsamer. Danke noch einmal! –