Java 随机存取图像(图片)文件

Java 随机存取图像(图片)文件,java,image,image-processing,file-format,geomap,Java,Image,Image Processing,File Format,Geomap,是否有允许随机访问其部分的文件格式(图像文件)。 例如,我有一个分辨率为100000x10000像素的巨大图像文件,我只想读一小部分。类似于具有缩放级别的地理地图 我想用Java编写一些应用程序。我可以使用数百个小文件并以某种方式将它们组合起来,但如果有一种方法可以使用一个大文件(或几个文件)就更好了。你这样做的能力将取决于你用于图片的文件格式。原则上,BMP或TIFF等非压缩文件格式将为您提供更多读取特定区域的自由 好消息是,您有一个标准Java类(请参阅),它允许您通过指定感兴趣的区域(请参

是否有允许随机访问其部分的文件格式(图像文件)。 例如,我有一个分辨率为100000x10000像素的巨大图像文件,我只想读一小部分。类似于具有缩放级别的地理地图


我想用Java编写一些应用程序。我可以使用数百个小文件并以某种方式将它们组合起来,但如果有一种方法可以使用一个大文件(或几个文件)就更好了。

你这样做的能力将取决于你用于图片的文件格式。原则上,BMP或TIFF等非压缩文件格式将为您提供更多读取特定区域的自由

好消息是,您有一个标准Java类(请参阅),它允许您通过指定感兴趣的区域(请参阅第3.3.1节ImageReadParam)来完成所需的工作

然而,正如我之前所说,这将取决于您的图像格式。在ImageReader类本身,您有一个名为“isRandomAccessEasy”的简便方法,如果给定图像的存储格式对随机访问像素(逐字从)没有固有的障碍,则该方法将返回true。

“但如果有一种方法可以使用一个大文件来实现,则会更好。”

我不这么认为。正如曼努埃尔所说,压缩图像的随机位置是很复杂的,因为大多数压缩算法考虑整个图像以最大化压缩能力。因此,解压缩过程将使用大量内存来解压缩此大小的图像

另一方面,如果不进行压缩,文件将按数量级增大


我认为你应该使用谷歌地图或其他工具所使用的方法。把原始的巨大图像分解成瓦片。通过这种方式,可以压缩瓷砖,并且可以使用更少的内存执行可视化。

纹理压缩

请看一看纹理压缩格式,该格式设计为可压缩且允许随机访问,以减少用于3D渲染的GPU纹理上的图像使用带宽:

与传统的图像压缩算法不同,纹理压缩算法针对随机访问进行了优化

以下格式似乎是开放的:

ARM马里AFBC就是一个(专有?)示例

低至4x4块级别的随机访问


我认为大多数工具都使用瓷砖。但是我怀疑你需要100多个文件。您可能还需要在不同的缩放级别上使用平铺。