使用AWT BuffereImage更新JavaFx可写映像的一部分

使用AWT BuffereImage更新JavaFx可写映像的一部分,javafx,bufferedimage,Javafx,Bufferedimage,我正在尝试使用多个较小的分片(作为AWT BuffereImage实例接收)高效地更新大型可写映像 我尝试过的事情: 我可以使用SwingFXUtils将BuffereImage转换为可写映像,但是在可写映像上没有简单的API可以从另一个可写映像中提取像素 我可以使用getData().getPixels(..)以int[]的形式从BuffereImage中获取像素 然而,WritableImage期望数据被紧密地压缩在单个整数中,即{ARGB,ARGB,…},而BuffereImage.ge

我正在尝试使用多个较小的分片(作为AWT BuffereImage实例接收)高效地更新大型可写映像

我尝试过的事情:

  • 我可以使用SwingFXUtils将BuffereImage转换为可写映像,但是在可写映像上没有简单的API可以从另一个可写映像中提取像素

  • 我可以使用getData().getPixels(..)以int[]的形式从BuffereImage中获取像素

    然而,WritableImage期望数据被紧密地压缩在单个整数中,即{ARGB,ARGB,…},而BuffereImage.getData.getPixels以整数序列的形式返回数据,即{R,G,B,a,R,G,B,a,…)

    很明显,我可以将数据强制转换为正确的格式,但这感觉不是很有效


我已经找到了使用哪种API的方法/指针,我很乐意自己编写代码。

实际上有一个版本将另一个PixelReader作为输入

private void update(Image input, WritableImage output, int x, int y) {
  int width = input.getWidth(null);
  int height = input.getHeight(null);

  WritableImage temp = new WritableImage(width, height); // same size as input
  SwingFXUtils.toFXImage(fragment, temp);

  output.getPixelWriter().setPixels(x, y, width, height, temp.getPixelReader(), 0, 0);
}