2011-01-31 11 views
2

現在のプロジェクトでは、あまりにも多くのイメージファイルを読み込む必要があるため、メモリの問題が発生しています。現在のシステムでは、圧縮されていないMicrosoft BMPファイルが読み込まれているので、これは明らかな問題です。ファイル全体を解析せずに画像の一部を読み込みます。使用するファイル形式とライブラリは何ですか?

そこで、我々は

    • は(組み込みLinuxシステム上で実行する必要があります)を解析するために高速であること、ファイル形式を探しているファイル全体
    • を復号化することなく、画像の一部を読むことができます
    • は可逆圧縮(なし8ビットカラーテーブル、してください)
    • は完全なアルファチャネルを含む(GIFのようなだけではなく、ビットマスク)
    • コンパイルし、LinuxとWindows
    • 上で動作を使用しています
    • は、商用アプリケーションで使用することができます(LGPLで結構です)
    • は私の最初の推測がPNGだったが、私は、私はデコードせずに画像の一部を解析することができるかどうかわからないのPhotoshop

    を使用してエクスポートすることができますファイル全体あなたは良いアイデアや経験を共有していますか?

  • +1

    ファイル全体をデコードしない画像、小さな幾何学的な領域を意味するのか、低忠実度のプレビュー/サムネイルを表示するのですか? –

    +1

    @Chris、私は小さな幾何学的領域を意味します。その領域を行や列に制限することさえできます。 – bastibe

    答えて

    1

    (私の印象は、あなたがラム圧ではなく、ストレージの限界に直面しているということである - 私はそのことについて間違っている場合は、これを無視してください)

    圧縮は、ストレージスペースを節約しますが、私はそれが必ずしもになるだろうとは思いませんあなた(または少なくともOS)が圧縮されたデータをラムにコピーし、それをさらにラムに解凍するので、ラムのフットプリントを減らすのに役立ちます(そして逆効果かもしれません)。

    非常に粗いビットマップ形式の場合は、関心のあるピクセルのファイルオフセットを計算し、fseek()を使用して少量のデータを取得するだけです。色/チャンネルを組み合わせたパック形式は、特に出力(ディスプレイやアルゴリズムなど)に直接役立つ形式の場合はさらに優れています。

    したがって、既存のフォーマットを特定するか、イメージを出力で直接使用可能なパックドビットマップフォーマットに事前処理するルーチンを作成し、これをPhotoshopにプラグインする方法を理解することが可能です埋め込みシステムで使用されているフラッシュカードやその他のストレージデバイスに書き込むものにプラグインされたバルクコンバータツールを書き込むことができます(パッケージの入力フォーマットの柔軟性を得るためにimagemagickの出力ドライバとしてコーディングすることがあります)。コードの埋め込み側は、実際に必要なデータをRAMに移動するだけなので非常に単純でメモリ効率が良くなります(O/Sバッファ付きの読み込みサイズをモジュロにしますが、そのバッファはシーンの裏でリサイクルされる必要があります)

    +0

    あなたは死んでいる、サー。私は間違いなくこれについて議論し、私たちのコンセプトに合っているかどうかを見ていきます!ありがとうございました! – bastibe

    1

    JPEGを使用してijg libraryが動作します。見てくださいherehere

    簡単に言えば:

    1. エントロピーデコードJPEG画像
    2. あなたは
    3. IDCTあなたはキャッチがある

    を必要とするブロックだけに興味を持っているブロックのDCT係数を取得しますそれでもファイル全体をエントロピーデコードする必要がありますが、これは完全なデコードパイプラインのほんの一部です(イメージ全体のIDCTが最も時間がかかります)。したがって、ファイル全体を渡す必要がありますが、実際には「ファイル全体をデコードする」というわけではありません。

    メモリが不安なので、ijg JPEGデコーダにはさまざまなメモリ要件があるシステムで作業するための多数のメモリマネージャが用意されています。あなたはそれについてのドキュメントを参照する必要があります(配布可能なものの一部です、私はすぐにオンラインのリンクを見つけることができませんでした)。

    完全ロスレスエンコーディング(人間の目には実質的に区別がつきません)のための低い量子化パラメータを指定することも、完全ロスレスエンコーディングを行った後に量子化ステップをスキップすることもできます。

    JPEGが満たすことができるかどうかわからない唯一の要件は、アルファチャンネルです。画像に別のカラーチャンネルとして保存しても、JPEGデコーダは気にしません。

    関連する問題