JavaFX:将像素写入PixelWriter

时间:2015-11-25 07:47:22

标签: java image javafx png bufferedimage

我正在寻找在javafx.scene.image.Image上写入像素的最快方法。写入BufferedImage的后备阵列要快得多。至少在我测试的图像上,BufferedImage只需要约20ms,另一方面WritableImage需要~100ms。我已经尝试SwingFXUtils但没有运气。

BufferedImage的代码(更快):

BufferedImage bi = createCompatibleImage( width, height );
WritableRaster raster = bi.getRaster();
DataBufferInt dataBuffer = (DataBufferInt) raster.getDataBuffer();

System.arraycopy( pixels, 0, dataBuffer.getData(), 0, pixels.length );

WritableImage的代码(较慢):

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 );

也许还有一种方法可以写入WritableImage的支持数组吗?

1 个答案:

答案 0 :(得分:1)

对于像素写入器的性能,选择正确的像素格式绝对至关重要。您可以通过

检查原生像素格式
pw.getPixelFormat().getType()

在我的Mac上,这是PixelFormat.Type.BYTE_BGRA_PRE。如果原始数据符合此像素格式,则传输到图像的速度应该非常快。否则,必须转换像素数据,这需要一些时间。