我尝试使用多个较小的磁贴有效地更新大型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的方法/指针之后,我很高兴自己编码。
答案 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);
}