随机访问图像(图片)文件

时间:2014-07-14 20:52:53

标签: java image image-processing file-format geomap

是否存在允许随机访问其部分的文件格式(图像文件)。 例如,我有一个分辨率为100000x100000像素的巨大图像文件,我想只读一个小部分。就像具有缩放级别的geomap一样。

我想用Java编写一些应用程序。我可以使用数百个小文件并以某种方式将它们组合起来,但是如果有一种方法可以用一个巨大的文件(或者很少的文件)来做它会好得多。

3 个答案:

答案 0 :(得分:0)

您执行此操作的能力取决于您用于图片的文件格式。原则上,非压缩文件格式如BMP或TIFF将使您在阅读特定区域时拥有更多自由。

好消息是你有一个标准的Java类(参见ImageReader),它允许你通过指定一个感兴趣的区域来完成你正在寻找的东西(阅读第3.3.1节ImageReadParam)。 p>

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

答案 1 :(得分:0)

但如果有一种方法可以用一个巨大的文件那么会好得多”

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

另一方面,文件将在没有压缩的情况下按数量级增大。

我认为您应该使用Google地图或Zoompy等工具使用的相同方法。拍摄原始的巨大图像并将其分解为瓷砖。通过这种方式,可以压缩切片,并且可以使用更少的内存来执行可视化。

答案 2 :(得分:0)

纹理压缩

看看纹理压缩格式,它们被设计为压缩并允许随机访问,以减少GPU纹理上用于3D渲染的图像使用带宽https://en.wikipedia.org/wiki/Texture_compression

  

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

以下格式似乎已打开:

ARM Mali AFBC是一个(专有?)示例https://www.arm.com/products/graphics-and-multimedia/mali-technologies

  

随机访问低至4x4块级