2011年4月28日木曜日

GetPixel


数年前から自作のグラフィックビューアを使ってるんだが、そこに実装した編集画面で、クロップ用にAutoCrop機能を実装していた。
ピクセルの色を判定して自動的に範囲指定するものだが、これにGetPixel関数を使っていて、これがすごく遅い。
で、いずれ高速化したいというのがずっと私のToDoリストに載ってたんだが、今回ようやく高速化できた。
GetPixel関数をやめて、直接ビットマップデータを参照して色判定するようにした。

ビットマップの構造自体はちょっと複雑だけど難航不落ってわけどもないんだが、データのポインタが探せなくて苦労した。実はwin32ベースではまだ探せてなくて、ビューアの画像デコードエンジンとして使ってるGFLのdllの機能を使ってる。
このdllはxnviewのエンジンになっていて、非常なスグレモノです。ココ↓
フリーでこんなスグレモノを使わせてくれてるxnviewは太っ腹ですね~。

で、この機能を借りてビットマップデータに直接アクセスすることができて、その結果の高速化だったんでまだまだなんだが、とりあえずは早くなりました。よかったよかった。
しかしGetPixel()が遅いのって周知っぽいですね。
検索したら結構情報ありました。
この関数は単に特定のポイントの色を取得するだけなら不満ないけど、スキャンする場合は使えないんですね。
勉強になりました。

0 件のコメント:

コメントを投稿