是否存在允許隨機訪問其部分的文件格式(圖像文件)。 例如,我擁有分辨率爲100000x100000像素的巨大圖像文件,我只想閱讀一小部分內容。就像一個縮放級別的geomap。隨機訪問圖像(圖片)文件
我想用Java編寫一些應用程序。我可以使用數百個小文件並將它們以某種方式組合起來,但如果有一種方法可以用一個巨大的文件(或幾個文件)來完成,那將會更好。
是否存在允許隨機訪問其部分的文件格式(圖像文件)。 例如,我擁有分辨率爲100000x100000像素的巨大圖像文件,我只想閱讀一小部分內容。就像一個縮放級別的geomap。隨機訪問圖像(圖片)文件
我想用Java編寫一些應用程序。我可以使用數百個小文件並將它們以某種方式組合起來,但如果有一種方法可以用一個巨大的文件(或幾個文件)來完成,那將會更好。
您的能力取決於您使用的圖片文件格式。原則上,非壓縮文件格式(如BMP或TIFF)將使您在閱讀特定區域時更加自由。
好消息是您有一個標準的Java類(請參閱ImageReader),您可以通過指定感興趣的區域來完成要查找的內容(請參閱3.3.1 ImageReadParam)。
但正如我之前所說,它將取決於您的圖像格式。在ImageReader類本身,您有一個方便的方法,名爲「isRandomAccessEasy」,如果給定圖像的存儲格式不會對隨機訪問像素(逐字從)沒有固有障礙,則將返回true。
「但它會更好,如果有一種方法用一個巨大的文件做」
我不這麼認爲。正如Manuel所說,訪問壓縮映像的隨機位置很複雜,因爲大多數壓縮算法都認爲整個映像最大化壓縮能力。因此,解壓縮過程將使用大量內存來解壓縮此大小的圖像。
另一方面,文件將在沒有壓縮的情況下按照數量級變大。
我認爲你應該使用Google Maps或Zoompy等工具使用的相同方法。採取原始的巨大形象,並在瓷磚中分解。通過這種方式,瓷磚可以被壓縮並且可以使用更少的存儲器來執行可視化。
紋理壓縮
看一看紋理壓縮格式,其目的是既壓縮並允許隨機訪問,以減少對GPU的紋理圖像使用的帶寬,3D渲染https://en.wikipedia.org/wiki/Texture_compression:
與傳統的圖像壓縮算法不同,紋理壓縮算法針對隨機存取進行了優化。
以下格式似乎是開放的:
的ARM Mali AFBC是一個(專有的?)例如https://www.arm.com/products/graphics-and-multimedia/mali-technologies
隨機存取下降到4×4塊的水平
我想大多數工具都使用瓷磚。我懷疑你需要超過100個文件。您可能還需要以不同縮放級別拍攝圖塊。 –