JavaFX:将像素写入PixelWriter的最快方法

Eze*_*aga 5 java png bufferedimage javafx image

我正在寻找写入像素的最快方法javafx.scene.image.Image.写入BufferedImage后备阵列的速度要快得多.至少在测试图像上我只花了~20ms BufferedImage,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 );
Run Code Online (Sandbox Code Playgroud)

代码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 );
Run Code Online (Sandbox Code Playgroud)

也许有办法写入WritableImage后备阵列?

mip*_*ipa 3

对于像素写入器的性能来说,选择正确的像素格式绝对至关重要。您可以通过检查原生像素格式是什么

pw.getPixelFormat().getType()
Run Code Online (Sandbox Code Playgroud)

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

  • 我假设可以调整源像素格式,以便实现最大传输速率。当您自己创建像素内容时,通常会出现这种情况。 (3认同)