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

标签 java image javafx png bufferedimage

我正在寻找在 javafx.scene.image.Image 上写入像素的最快方法。写入 BufferedImage 的支持数组要快得多。至少在我制作的测试图像上,BufferedImage 只用了约 20 毫秒,而 WritableImage 则用了约 100 毫秒。我已经尝试过 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 的支持数组?

最佳答案

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

检查 native 像素格式是什么
pw.getPixelFormat().getType()

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

关于JavaFX:将像素写入 PixelWriter 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33911010/

相关文章:

java - 如何在Java中从另一个类实现start(Stage)方法?

JavaFX 和 OpenJDK

java - 如何在 Play Framework 2.5 中编写异步操作?

java - Jsoup 总是返回元素第一次出现的索引

android - 图像,SD卡,安卓

java图像不显示

java - 如何在场景生成器中将按钮适合圆形图像?

java - 带进度条的文件上传,或从 Google Web Toolkit 访问 Html 5 File Api?

java - 设置 POI XWFP 段落行间距

python-pptx 在布局中更改图片