Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 在JavaFX中加载和处理大型图像的最有效方法_Image_Javafx_Pixels - Fatal编程技术网

Image 在JavaFX中加载和处理大型图像的最有效方法

Image 在JavaFX中加载和处理大型图像的最有效方法,image,javafx,pixels,Image,Javafx,Pixels,我只是需要一些指导,我找不到另一个可以回答这个问题的问题。我想答案甚至不必是JavaFx指定的 我想在JavaFX应用程序中加载和操作相当大的图像/像素阵列 现在我有一个简单的方法:一个简单的Stackpane,它保存一个Canvas对象,加载到一个ScrollPane中 ScrollPane scrollPane = new ScrollPane(); StackPane stackPane = new StackPane(); Canvas = new Canvas(4000,6000);

我只是需要一些指导,我找不到另一个可以回答这个问题的问题。我想答案甚至不必是JavaFx指定的

我想在JavaFX应用程序中加载和操作相当大的图像/像素阵列

现在我有一个简单的方法:一个简单的Stackpane,它保存一个Canvas对象,加载到一个ScrollPane中

ScrollPane scrollPane = new ScrollPane();
StackPane stackPane = new StackPane();
Canvas = new Canvas(4000,6000);

stackPane.getChildren().add(canvas);
scrollPane.setContent(stackPane);
root.setCenter(scrollPane);
在特定的画布大小下,不可能创建画布对象,我得到了一些例外。如果我脑子里有更大的维度呢

画布的总大小是影响性能还是仅影响滚动窗格中的详细视图

在特定的画布大小下,不可能创建画布对象,我得到了一些例外

默认情况下,JavaFX节点由图形硬件渲染为纹理。不同的图形硬件对单个纹理的最大大小有不同的限制。通常,该纹理大小限制为2个数量级,各种图形硬件的常见最大值可能为8192x8192或16384x16384。出于兼容性原因,如果您希望非常保守,最好假设最大纹理大小为8192x8192,甚至4096x4096

如果我脑子里有更大的维度呢

在平铺算法中使用多个节点。例如,使用由64个4096x4096个画布节点组成的8x8阵列创建32768x32768画布。您需要自己编写处理此问题的逻辑,据我所知,目前还没有任何库可以为您这样做。对于非常大的尺寸,例如,数十万或数百万像素,则可以使用虚拟化控件(如a)


有人告诉我画布在使用像素阵列时具有更好的性能

我怀疑canvas是否比由and支持的canvas具有更好的性能特征,因为canvas需要为更广泛、更复杂的特性和功能阵列提供服务。也就是说,对于大多数应用程序,用户不太可能注意到画布和可写映像的性能之间存在任何实质性差异,您可能应该根据最适合您的应用程序的功能在两者之间进行选择

另一方面,在处理图像数据的像素级操作时,一个性能提示是选择图形硬件本机使用的适当方法,因为这样可以减少底层图形渲染系统需要进行的数据复制和像素数据转换的数量。有关了解此性能提示的更多信息,请参阅相关的Oracle JavaFX论坛线程:

在特定的画布大小下,不可能创建画布对象,我得到了一些例外

默认情况下,JavaFX节点由图形硬件渲染为纹理。不同的图形硬件对单个纹理的最大大小有不同的限制。通常,该纹理大小限制为2个数量级,各种图形硬件的常见最大值可能为8192x8192或16384x16384。出于兼容性原因,如果您希望非常保守,最好假设最大纹理大小为8192x8192,甚至4096x4096

如果我脑子里有更大的维度呢

在平铺算法中使用多个节点。例如,使用由64个4096x4096个画布节点组成的8x8阵列创建32768x32768画布。您需要自己编写处理此问题的逻辑,据我所知,目前还没有任何库可以为您这样做。对于非常大的尺寸,例如,数十万或数百万像素,则可以使用虚拟化控件(如a)


有人告诉我画布在使用像素阵列时具有更好的性能

我怀疑canvas是否比由and支持的canvas具有更好的性能特征,因为canvas需要为更广泛、更复杂的特性和功能阵列提供服务。也就是说,对于大多数应用程序,用户不太可能注意到画布和可写映像的性能之间存在任何实质性差异,您可能应该根据最适合您的应用程序的功能在两者之间进行选择


另一方面,在处理图像数据的像素级操作时,一个性能提示是选择图形硬件本机使用的适当方法,因为这样可以减少底层图形渲染系统需要进行的数据复制和像素数据转换的数量。有关了解此性能提示的更多信息,请参阅相关的Oracle JavaFX论坛线程:。

此处使用画布可能不是一个好主意,因为画布不提供像素阅读器。获取像素的唯一方法是创建快照。对于图像,您同时拥有像素阅读器和像素写入器。我怀疑任何严肃的图像处理程序如果不能在两个方向上操作单独的pixesl,是否会起作用。

在这里使用画布可能不是一个好主意,因为画布不提供像素阅读器。获取像素的唯一方法是创建快照。对于图像,您同时拥有像素阅读器和像素写入器。我怀疑任何严肃的图像处理程序如果不能在两个方向上操作单个pixesl,是否会起作用。

从您的问题来看,不清楚在谈论图像时为什么要使用
画布。在我看来,在JavaFX中,这意味着
Image
ImageView
。请澄清。有人告诉我画布在使用像素阵列时具有更好的性能。从您的问题来看,不清楚您在谈论图像时为什么使用
画布。在我看来,在JavaFX中,这意味着
Image
ImageView
。请澄清。有人告诉我帆布在工作时有更好的性能