Ich habe ein Programm geschrieben, um Bilder zu ändern.Manchmal, aber konsistent, zu einem BufferedImage zeichnen, liefert falsche Farben
Zuerst habe ich das Bild, und erhalten ihre Zeichnung Kontext wie folgt aus:
BufferedImage image;
try {
image = ImageIO.read(inputFile);
} catch (IOException ioe) { /* exception handling ... */ }
Graphics g = image.createGraphics();
Und dann ändern ich das Bild wie folgt aus:
for (int x = 0; x < image.getWidth(); x++) {
for (int y = 0; y < image.getHeight(); y++) {
g.setColor(/* calculate color ... */);
g.fillRect(x, y, 1, 1);
}
}
Nachdem ich fertig habe das Bild modifizierende Ich speichere das Bild so:
try {
ImageIO.write(image, "PNG", save.getSelectedFile());
} catch (IOException ioe) { /* exception handling ... */ }
Jetzt die meiste Zeit das funktioniert gut.
Allerdings, wenn ich versuchte, Umfärbung diese Textur
dieser
bekomme ich diese statt:
Innerhalb des Debuggers ist die Farbe des Graphics
jedoch der Rosaton, den ich möchte.
Die Kommentare scheinen zu suggerieren, dass das Bild, das der Benutzer öffnet, einige Farbbeschränkungen hat, und da ich zu dem gleichen Bild lese, von dem ich lese, muss mein Programm diese Einschränkungen einhalten. Das Beispielbild scheint ziemlich Graustufen-y zu sein, und anscheinend ist seine Bittiefe 8 Bit. Vielleicht wird das Pink, das ich darauf zeichne, in Graustufen umgewandelt, weil das Bild 8-Bit bleiben muss?
Jede Möglichkeit, ein Setup (d. H. [MCVE] und Beispielbild) zur Verfügung zu stellen, wo es möglich ist, dies zu reproduzieren? – Marco13
Das Farbmodell unterstützt möglicherweise nicht die Farben, die Sie verwenden – MadProgrammer
@ Marco13 Ich habe ein Beispiel zu meiner Frage hinzugefügt. – JoFelix