使用AWT BufferedImage更新JavaFx WritableImage的一部分

时间:2014-08-13 12:10:07

标签: javafx bufferedimage

我尝试使用多个较小的磁贴有效地更新大型WritableImage,这些磁贴作为AWT BufferedImage实例接收。

我尝试的事情:

  • 我可以使用SwingFXUtils将BufferedImage转换为WritableImage,但是在Writable镜像上没有简单的API可以从另一个我可以弄清楚的WritableImage中获取像素。

  • 我可以使用getData()获取BufferedImage中的像素作为int []。getPixels(....)。

    然而,WritableImage期望数据紧密打包在一个整数中,即{ARGB,ARGB,...},而BufferedImage.getData.getPixels将数据作为一系列整数返回,即{R,G,B,A,R, G,B,A,......)。

    我显然可以将数据强制转换为正确的格式,但这并不是非常有效。

我在使用哪种API的方法/指针之后,我很高兴自己编码。

1 个答案:

答案 0 :(得分:0)

实际上有一个版本PixelWriter.setPixels,它将另一个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);
}