Wie konvertiere ich ein Byte [] in ein BufferedImage in Java?

Ich poste diesen Thread, weil ich Schwierigkeiten habe, mit Bildern in Java umzugehen. Ich möchte in der Lage sein, ein Bild in ein Byte-Array [] umzuwandeln und dann den umgekehrten Vorgang ausführen zu können, damit ich die RGB-Werte der einzelnen Pixel ändern und dann ein neues Bild erstellen kann. Ich möchte diese Lösung verwenden, da setRGB () und getRGB () von BufferedImage für große Bilder möglicherweise zu langsam sind (korrigieren Sie mich, wenn ich mich irre).

Ich habe hier einige Posts gelesen, um ein Byte-Array [] zu erhalten (wie hier), so dass jedes Pixel durch 3 oder 4 Zellen des Arrays dargestellt wird, die den roten, den grünen und den blauen Wert enthalten (mit dem zusätzlichen Alpha-Wert, wenn es 4 Zellen gibt), was für mich sehr nützlich und benutzerfreundlich ist. Hier ist der Code, mit dem ich dieses Array erhalte (gespeichert in einer von mir erstellten PixelArray-Klasse):

public PixelArray(BufferedImage image)
{
    width = image.getWidth();
    height = image.getHeight();
    DataBuffer toArray = image.getRaster().getDataBuffer();
    array = ((DataBufferByte) toArray).getData();
    hasAlphaChannel = image.getAlphaRaster() != null;
}

Mein großes Problem ist, dass ich keine effiziente Methode gefunden habe, um dieses Byte-Array [] in ein neues Bild zu konvertieren, wenn ich das Bild transformieren wollte (entfernen Sie beispielsweise die Blau / Grün-Werte und behalten Sie nur die roten Werte bei). Ich habe diese Lösungen ausprobiert:

1) Erstellen Sie ein DataBuffer-Objekt und anschließend ein SampleModel, um schließlich ein WritableRaster und anschließend BufferedImage (mit zusätzlichen ColorModel- und Hashtable-Objekten) zu erstellen. Es hat nicht funktioniert, weil ich anscheinend nicht alle Informationen habe, die ich brauche (ich habe keine Ahnung, was der Hashtable for BufferedImage () -Konstruktor ist).

2) Verwenden eines ByteArrayInputStream. Dies hat nicht funktioniert, da das mit ByteArrayInputStream erwartete Byte [] -Array nichts mit meinem zu tun hat: Es repräsentiert jedes Byte der Datei und nicht jede Komponente jedes Pixels (mit 3-4 Bytes für jedes Pixel) ...

Könnte mir jemand helfen?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage