Ich habe mir die ImageConverter-Klasse angesehen und versucht, herauszufinden, wie man ein BufferedImage in eine 8-Bit-Farbe umwandelt, aber ich habe keine Ahnung, wie ich das machen würde. Ich suchte auch im Internet und konnte keine einfache Antwort finden, sie sprachen alle über 8-Bit-Graustufenbilder. Ich möchte einfach die Farben eines Bildes in 8 Bit konvertieren ... nichts anderes, keine Größenanpassung, nichts. Kann mir jemand sagen, wie man das macht?Wie konvertiert man ein BufferedImage in 8 Bit?
Antwort
Dieser Code-Schnipsel aus dem Artikel "Transparent gifs in Java" at G-Man's Uber Software Engineering Blog funktioniert gut:
public static void main(String[] args) throws Exception {
BufferedImage src = convertRGBAToIndexed(ImageIO.read(new File("/src.jpg")));
ImageIO.write(src, "gif", new File("/dest.gif"));
}
public static BufferedImage convertRGBAToIndexed(BufferedImage src) {
BufferedImage dest = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_BYTE_INDEXED);
Graphics g = dest.getGraphics();
g.setColor(new Color(231, 20, 189));
// fill with a hideous color and make it transparent
g.fillRect(0, 0, dest.getWidth(), dest.getHeight());
dest = makeTransparent(dest, 0, 0);
dest.createGraphics().drawImage(src, 0, 0, null);
return dest;
}
public static BufferedImage makeTransparent(BufferedImage image, int x, int y) {
ColorModel cm = image.getColorModel();
if (!(cm instanceof IndexColorModel))
return image; // sorry...
IndexColorModel icm = (IndexColorModel) cm;
WritableRaster raster = image.getRaster();
int pixel = raster.getSample(x, y, 0); // pixel is offset in ICM's palette
int size = icm.getMapSize();
byte[] reds = new byte[size];
byte[] greens = new byte[size];
byte[] blues = new byte[size];
icm.getReds(reds);
icm.getGreens(greens);
icm.getBlues(blues);
IndexColorModel icm2 = new IndexColorModel(8, size, reds, greens, blues, pixel);
return new BufferedImage(icm2, raster, image.isAlphaPremultiplied(), null);
}
Arbeitete gut, musste nur den Transparenzteil entfernen. –
Sie können dazu JAI (Java Advanced Imaging), die offizielle Sun (jetzt Oracle) Bildbibliothek verwenden.
Die ColorQuantizerDescriptor zeigt die Auswahl der Quantisierungsprozesse, die Sie anwenden können.
Haben Sie einen Beispielcode? http://stackoverflow.com/questions/15312921/how-to-use-colorquantizerdescriptor –
- 1. Wie konvertiert man 8 Bit in 16 Bit in VHDL?
- 2. Wie konvertiert man 8-Bit-Bytes in 6-Bit-Zeichen?
- 3. Wie konvertiert man ein 8-Bit OpenCV IplImage * in ein 32-Bit IplImage *?
- 4. Wie konvertiert man BufferedImage zu einem int []?
- 5. Wie konvertiert man einen Java 8 Stream in ein Array?
- 6. Wie konvertiert man in Python 64-Bit in zwei Dezimalzahlen?
- 7. Wie konvertiert man UTF-8 nach US-Ascii in Java
- 8. Wie konvertiert man eine RGB-Farbe in die am nächsten passende 8-Bit-Farbe?
- 9. Wie ein BufferedImage
- 10. Wie skaliere ich ein BufferedImage
- 11. Wie konvertiert man HTML einer Website in ein Bild?
- 12. Wie konvertiert man ein indiziertes Pixelformat in ein 32-Bit-Bild?
- 13. Wie konvertiert man ein JPG in ein 24-Bit unkomprimiertes BMP 4.0?
- 14. Wie konvertiert man Karte in eine Liste in Java 8
- 15. Wie konvertiert man eine Kodierung in UTF-8 in Go?
- 16. Umwandlung eines ImageIcon in ein BufferedImage
- 17. Wie konvertiert man ein Instant- in ein Datumsformat?
- 18. Wie konvertiert man literale Sequenzen in UTF-8?
- 19. Wie konvertiert man Multibyte UTF-8 std :: string in NSString?
- 20. Wie konvertiert man Java 8 map.remove in Java 1.6?
- 21. PHP Wie man Strings von DomCrawler in UTF-8 konvertiert
- 22. Wie konvertiert man ein Ein-Byte-Const char * in eine UTF-8-Codierung
- 23. Wie konvertiert man ein SparseArray in ArrayList?
- 24. Wie konvertiert man ein Datum in YYYYDDD?
- 25. Wie konvertiert man ein IplImage in Mat?
- 26. Wie konvertiert man Textdaten in ein Bild?
- 27. Wie konvertiert man System.IO.Stream in ein Image?
- 28. Wie konvertiert man ein Bild in Zeichensegmente?
- 29. Wie konvertiert man ein Datum in Millisekunden
- 30. Wie man ein QJsonObject in QString konvertiert
Sie müssen wahrscheinlich ein Quantisierungsalgorithmus wählen, das heißt. etwas, das die Farbpalette Ihrer Bilder in eine 256-er-Palette umwandelt. – PhiLho
Was meinen Sie mit der Umwandlung der Farben eines Bildes in 8-Bit? Ich nehme an, Sie möchten den Farbraum reduzieren? Möchten Sie eine Farbquantisierung durchführen? – Behe
Könnt ihr mich auf eine Bibliothek/API hinweisen? Ich habe keine Ahnung, wovon du redest. Das hört sich auch so an, als könnte ich meine eigene Palette erstellen, die nach Möglichkeit besser wäre. –