Sto cercando il modo più veloce per scrivere pixel su javafx.scene.image.Image
. La scrittura sul backing array di BufferedImage
è molto più veloce. Almeno sull'immagine di prova ho preso solo ~ 20ms per BufferedImage
, WritableImage
d'altra parte ha ~ 100ms. Ho già provato SwingFXUtils
ma senza fortuna.JavaFX: il modo più veloce per scrivere pixel su PixelWriter
Codice in BufferedImage
(più veloce):
BufferedImage bi = createCompatibleImage(width, height);
WritableRaster raster = bi.getRaster();
DataBufferInt dataBuffer = (DataBufferInt) raster.getDataBuffer();
System.arraycopy(pixels, 0, dataBuffer.getData(), 0, pixels.length);
Codice in WritableImage
(più lento):
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);
forse c'è un modo per scrivere a WritableImage
s' allineamento supporto troppo?
Questo non risponde alla domanda. Il formato Pixel dipende dall'immagine sorgente utilizzata. Se non si utilizza il formato che corrisponde al formato dell'immagine di origine, si otterrà un'eccezione in fase di esecuzione. – jjhavokk
Ho ipotizzato che il formato pixel di origine possa essere adattato in modo da poter raggiungere la massima velocità di trasferimento. Questo è spesso il caso quando crei tu stesso il contenuto dei pixel. – mipa