2014-07-14 54 views
2

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

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

+1

我想大多数工具都使用瓷砖。我怀疑你需要超过100个文件。您可能还需要以不同缩放级别拍摄图块。 –

回答

0

您的能力取决于您使用的图片文件格式。原则上,非压缩文件格式(如BMP或TIFF)将使您在阅读特定区域时更加自由。

好消息是您有一个标准的Java类(请参阅ImageReader),您可以通过指定感兴趣的区域来完成要查找的内容(请参阅3.3.1 ImageReadParam)。

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

0

但它会更好,如果有一种方法用一个巨大的文件做”

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

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

我认为你应该使用Google Maps或Zoompy等工具使用的相同方法。采取原始的巨大形象,并在瓷砖中分解。通过这种方式,瓷砖可以被压缩并且可以使用更少的存储器来执行可视化。

0

纹理压缩

看一看纹理压缩格式,其目的是既压缩并允许随机访问,以减少对GPU的纹理图像使用的带宽,3D渲染https://en.wikipedia.org/wiki/Texture_compression

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

以下格式似乎是开放的:

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

随机存取下降到4×4块的水平