Ich bin auf der Suche nach dem schnellsten Weg, Pixel auf javafx.scene.image.Image
zu schreiben. Schreiben in BufferedImage
's Backing Array ist viel schneller. Zumindest auf dem Testbild, das ich gemacht habe, dauerte es nur ~ 20ms für BufferedImage
, WritableImage
nahm andererseits ~ 100ms. Ich habe es schon versucht SwingFXUtils
aber kein Glück.JavaFX: Schnellste Möglichkeit Pixel in PixelWriter zu schreiben
-Code für BufferedImage
(schneller):
BufferedImage bi = createCompatibleImage(width, height);
WritableRaster raster = bi.getRaster();
DataBufferInt dataBuffer = (DataBufferInt) raster.getDataBuffer();
System.arraycopy(pixels, 0, dataBuffer.getData(), 0, pixels.length);
-Code für WritableImage
(langsamer):
WritableImage wi = new WritableImage(width, height);
PixelWriter pw = wi.getPixelWriter();
WritablePixelFormat<IntBuffer> pf = WritablePixelFormat.getIntArgbInstance();
pw.setPixels(0, 0, width, height, pf, pixels, 0, width);
Vielleicht gibt es einen Weg zu zu WritableImage
‚s Träger Array zu schreiben?
Dies beantwortet die Frage nicht. Das Pixelformat hängt vom verwendeten Quellbild ab. Wenn Sie nicht das Format verwenden, das dem Quellbildformat entspricht, erhalten Sie zur Laufzeit eine Ausnahme. – jjhavokk
Ich ging davon aus, dass das Quellpixelformat so angepasst werden kann, dass die maximale Übertragungsrate erreicht werden kann. Dies ist häufig der Fall, wenn Sie den Pixelinhalt selbst erstellen. – mipa