3

メモリにある BMP (HBITMAP または CImage として保存) を取得し、ディスク上の PNG ファイルに保存する必要があります。

現在、画像をpngとして保存する方法は次のとおりです。CImage img; img.Save("foo.png")

私の問題は、それが遅すぎることです(〜1920X1080で250ms)。これには、JPG として保存する場合の 3 倍の時間がかかり、BMP として保存する場合の約 9 倍の時間がかかります。

これを行うLinux用のg ++​​ライブラリ(libpngなど)がたくさんあることは知っていますが、ビジュアルスタジオをサポートするライブラリのほとんどはバージョン6のみをサポートしており、ベンチマークのあるものを見つけていないので、ちょっとこれらのライブラリを動作させようとするのをためらって、遅すぎることがわかりました。

どのタイプのエンコーダー ウィンドウが使用されているかはわかりませんが (DLL に隠されています)、より高速なエンコーダーが必要です (ディスク サイズを少し犠牲にして、最大で 2 倍まで増やしても構わないと思っています)。

Java ライブラリはこれを非常に迅速に行いますが、何らかの理由で Microsoft のライブラリは亀のように遅いです。

画面サイズのPNGを約100ミリ秒でディスクに保存するためのオプションは何ですか?

4

2 に答える 2

1

libpng が最良の選択肢であると確信しています (ただし、ベンチマークはありません)。

少なくとも、保存オプションを調整できるライブラリを探します(CImageそうではありません)。次の 2 つの関連するオプションを試してください。

  1. Zlib 圧縮レベル (0-9) : 典型的なデフォルト値 (6) で通常は問題ありません。圧縮率を下げると、速度が大幅に向上することはめったにありません。

  2. フィルタ タイプ。これはもっと重要なことかもしれません。速度を最適化したい場合は、独自のフィルター (通常は PNG_FILTER_PAETH) を事前に選択します。

于 2012-07-30T02:18:30.833 に答える
0

libpng を自分でコンパイルするのはとても簡単です。この応答を入力する前に、自分でやっただけです。約90秒かかりました。

  1. http://zlib.net/から zlib をダウンロード します。

  2. http://sourceforge.net/projects/libpng/files/libpng15/1.5.12/lpng1512.zip/downloadから libpng をダウンロードします。

  3. libpng zip ファイルの内容を解凍します。

  4. コマンド シェルを開きます。

  5. "cd /dd:\projects\libpng" (libpng ソースを解凍したディレクトリに移動します)

  6. 「コピースクリプト\libpng.h.prebuilt libpng.h」

  7. libpng ディレクトリに新しい Visual Studio C++ プロジェクト (スタティック ライブラリ) を作成します。

  8. libpng ディレクトリからすべての *.c ファイルをプロジェクトに追加します。

  9. zlib プロジェクト ディレクトリをプロジェクトのインクルード パスに追加します。(zlib.h が見つかる場所ならどこでも)

  10. プロジェクトをビルドします。png コード ライブラリが正常にコンパイルされるはずです。終わり。

于 2012-07-29T23:56:34.050 に答える