我正在开发一个需要在JavaFX中比较大量图像数据的应用程序。为了进行比较,我需要获取图像像素的RGB数据。假设我需要比较的图片是Picture1和Picture2。其中,Picture1是用户选择的输入图片,Picture2是我通过编程绘制的图形。
据我所知,在JavaFX中获取每个像素的RGB数据的唯一方法是使用
然而,快照需要很长时间才能完成。
是否有其他方法可以将
请对我温柔一点。这是我在Stack Overflow上的第一个问题,我不是真正的程序员也不是IT学生。我编写代码只是出于兴趣。
因此,在此提前感谢您。干杯。
据我所知,在JavaFX中获取每个像素的RGB数据的唯一方法是使用
Image
的PixelReader
。对于Picture1这样的输入图片来说,这没问题。但是,我需要在Picture2上进行绘制,而Picture2是一个Canvas
(我使用多边形进行绘制,因为使用PixelWriter
逐像素绘制有点复杂),并且没有PixelReader
或类似功能的东西。因此,我的解决方案如下:
- 读取输入图片并创建Picture1
- 创建一个
Canvas
并进行绘制 - 将
Canvas
附加到场景中 - 对场景进行快照并创建可写入的图像Picture2
- 比较Picture1和Picture2
public static WritableImage makeDrawableImage(Canvas in) {
AnchorPane root = new AnchorPane(in);
WritableImage out = new WritableImage((int)in.getWidth(), (int)in.getHeight());
Scene sc = new Scene(root, in.getWidth(), in.getHeight());
out = in.snapshot(null, null);
return out;
}
然而,快照需要很长时间才能完成。
out
的值从未被分配。我不知道我做错了什么。是否有其他方法可以将
Canvas
转换为Image
或WritableImage
?或者可能有一个库可以更容易地使用PixelWriter
绘制多边形?请对我温柔一点。这是我在Stack Overflow上的第一个问题,我不是真正的程序员也不是IT学生。我编写代码只是出于兴趣。
因此,在此提前感谢您。干杯。
return canvas.snapshot(spa, writableImage)
没有返回任何东西。我认为这是因为它需要很长时间。是这样吗?画布的尺寸是600x1000。无论如何,谢谢。 - Teguh Hidayat