2009-07-14 17 views
2

私はパイプの夢かもしれない質問がありますが、私の仲間のStack Overflow'ersが私を助けてくれるかどうか知りたかったのです。画像操作にGDI +の代わりにグラフィックカードを使用する

私が働く会社では、毎月億円の画像操作をしています。基本的には、大量の画像を取り、それを256ピクセル四方の画像にスライスし、色を量子化してpngとして保存し、次のマンモス画像上に移動します。私たちはできるだけ早くこれを行うために数多くの技術を採用していますが、現在は非常に高速ですが、スピードを飛躍的に向上させるチャンスがあると思います。

アプリケーション自体は.Net 2.0です。大きな画像のさまざまなバイトをループし、小さな画像ごとにバイトを読み取り、量子化アルゴリズムを実行した後にGDIを使用して画像を保存します。私たちにはこのアプリケーションを実行する数十台のマシンがあり、それらのすべてにはNvidia Geforce 8 Videoカード(またはそれ以上)があります。

CPUの代わりにGPUを使用して上記のタスクの一部またはすべてを実行する方法はありますか?もしそうなら、私はこれをどのようにするのですか?残念ながら私はこのようなものは一度もコーディングしていないので、誰かが私を助けることができれば、かなり徹底的に(そしてゆっくりと)説明する必要があるかもしれません。

+0

万が一衛星画像を処理していませんか? – hannson

+0

実際はありませんが、プリンシパルは同じです。 – Ash

答えて

1

いくつかの技術がに見て:

  1. Windows Imaging Components。これはGPUを使用しているとは思えないので(私はwongかもしれませんが)GDI +よりもはるかに高速でなければならないので、あなたが何をしているかは正確には分かりません。

  2. Direct2D。これは多くの描画操作にGPUを使用し、Windowsイメージングコンポーネントとうまく統合されます。あなたの説明からは、GPUによって最適化された描画操作が必要なものとまったく同じかどうかは明らかではありません。

これらの上に、画像操作用のピクセルシェーダーを使用できます。これは私が掘り下げていない領域ですので、他の人がコメントするために残しておきます。

別の言い方をすれば、Windows Imaging ComponentsはPNGのロード/セーブのボトルネックを大幅に減らすはずです。それが提供する操作は、おそらくGDI +よりはるかに最適な方法で画像をスライスするのにも役立ちます。 Direct2Dおよび/またはピクセルシェーダは、ピクセルレベルの操作に役立ちます。ピクセルシェーダは、画像に必要なカラー量子化操作を直接行う方法がない場合にのみ必要です。

2

大規模な定義ですか?これは、使用可能性のCUDAある

(換言すれば、大規模は相対的である) - NVIDIA GPUの -

http://developer.download.nvidia.com/compute/cuda/sdk/website/projects/dxtc/doc/cuda_dxtc.pdf

+0

+1はCUDAについて知っています。 –

+0

CUDAは画像をスライスするのではなく、画像の圧縮に関するより多くのようです。プロセスの最後には圧縮がクールです(そして問題の一部になります)が、まだPNGを出力する必要があります。 大量の場合、私が切っている画像は8192px×1024pxです。 – Ash

関連する問題