Ich habe ein Problem bezüglich der Erstellung eines JavaFX WriteableImage mit einem Byte-Array von Graustufen-Bilddaten.Verwenden von PixelWriter.setargb
Ich habe eine Arbeitsfunktion für BufferedImage schreiben, aber was ich scheint, eine gleichwertige Methode, um für Bild mir ein Bild zurückkehrt mit allen Einträgen gleich 0.
Dies ist die Arbeitsweise ist:
private static BufferedImage getBufferedImageFromData(int height, int width, byte[] data) {
BufferedImage result = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for(int i = 0; i < width * height; ++i){
int a = 0xFF << 24;
int r = (data[i] & 0xFF) << 16;
int g = (data[i] & 0xFF) << 8;
int b = data[i] & 0xFF;
int x = i % width;
int y = (i - x)/width;
result.setRGB(x, y, a | r | g | b);
}
return result;
}
Und das ist mein Versuch einer gleichwertigen Methode für JavaFX (die mit allen Pixeln ein Bild zurück auf 0 gesetzt):
private static Image getImageFromData(int height, int width, byte[] data) {
WritableImage wr = new WritableImage(width, height);
PixelWriter pw = wr.getPixelWriter();
for(int i = 0; i < width * height; ++i) {
int r = (data[i] & 0xFF) << 16;
int g = (data[i] & 0xFF) << 8;
int b = data[i] & 0xFF;
int x = i % width;
int y = (i - x)/width;
pw.setArgb(x, y, r | g | b);
}
return wr;
}
Nun, der einzige Grund, warum ich konnte Ich habe bis jetzt herausgefunden, warum ich ein mit 0s gefülltes Bild habe, dass ich meine Werte nicht richtig formatiere, das heißt, dass BufferedImage.setRGB die angegebenen Werte formatiert und PixelWriter.argb formatierte Werte erwartet.
Ich habe keine Ahnung, was genau müsste ich es ändern Was
zu arbeiten, warum ich PixelWriter.setPixels nicht verwenden: Es scheint sehr Zeit intensiv im Vergleich mit der Methode zu sein, habe ich versucht, , da muss ich ein neues Array 3x so groß wie der Strom aufstellen und erst dann an die Methode übergeben. Ich habe es sowieso erfolglos versucht.
Vielen Dank für jede Hilfe
Vielen Dank! Dies erklärt es und funktioniert perfekt –