そのセクションへのランダム アクセスを許可するファイル形式 (イメージ ファイル) はありますか。たとえば、解像度が 100000x100000 ピクセルの巨大な画像ファイルがあり、小さなセクションを 1 つだけ読みたいとします。ズーム レベルのあるジオマップのように。
Javaでアプリを書きたいです。何百もの小さなファイルを使用してそれらを何らかの方法で結合することもできますが、1 つの巨大なファイル (またはそれらのいくつか) でそれを行う方法があれば、はるかに優れています。
そのセクションへのランダム アクセスを許可するファイル形式 (イメージ ファイル) はありますか。たとえば、解像度が 100000x100000 ピクセルの巨大な画像ファイルがあり、小さなセクションを 1 つだけ読みたいとします。ズーム レベルのあるジオマップのように。
Javaでアプリを書きたいです。何百もの小さなファイルを使用してそれらを何らかの方法で結合することもできますが、1 つの巨大なファイル (またはそれらのいくつか) でそれを行う方法があれば、はるかに優れています。
"しかし、1つの巨大なファイルでそれを行う方法があれば、はるかに良いでしょう"
そうは思わない。マヌエルが言ったように、ほとんどの圧縮アルゴリズムは画像全体を考慮して圧縮能力を最大化するため、圧縮画像のランダムな位置にアクセスするのは複雑です。したがって、解凍プロセスは、このサイズの画像を解凍するために大量のメモリを使用します。
一方、ファイルは圧縮しないと桁違いに大きくなります。
Google マップやZoompyなどのツールで使用されているのと同じアプローチを使用する必要があると思います。元の巨大な画像をタイルに分割します。このようにして、タイルを圧縮することができ、より少ないメモリを使用して視覚化を実行できます。
それができるかどうかは、画像に使用しているファイル形式によって異なります。原則として、BMP または TIFF などの非圧縮ファイル形式を使用すると、特定の領域をより自由に読み取ることができます。
良いニュースは、標準の Java クラス ( ImageReaderを参照) があることです。このクラスを使用すると、関心のある領域を指定することで、探していることを正確に行うことができます (セクション 3.3.1 ImageReadParam を参照)。
ただし、前に述べたように、画像形式によって異なります。ImageReader クラス自体には、「isRandomAccessEasy」という名前の便利なメソッドがあり、指定された画像のストレージ形式がピクセルへのランダムアクセスに固有の障害を置かない場合に true を返します(公式ドキュメントからの逐語的)。
テクスチャ圧縮
3D レンダリングのための GPU テクスチャでの画像使用の帯域幅を削減するために、圧縮とランダム アクセスの両方を可能にするように設計されたテクスチャ圧縮形式を確認してください https://en.wikipedia.org/wiki/Texture_compression :
従来の画像圧縮アルゴリズムとは異なり、テクスチャ圧縮アルゴリズムはランダム アクセス用に最適化されています。
次の形式が開いているようです。
ARM Mali AFBC は 1 つの (独自の?) 例ですhttps://www.arm.com/products/graphics-and-multimedia/mali-technologies
4x4 ブロック レベルまでのランダム アクセス