DIB画像処理に入る前に
インターネットなどで画像処理に対して検索をかけると、結構な数がヒットしますが、その殆どが数式で説明したりグラフを用いて説明するもので、数学が苦手な私には何のことかさっぱりです。ここで紹介するフィルタ処理等はコーディング再優先になっています。(つーか、私も詳しいアルゴリズムを知らないものが多いですし、アルゴリズムを理解しているとはいい難いので説明できません(^^;)
私がコードを書くにあたって参考にさせていただいたものがある場合は、そのページへリンクを張ったりしておきますので、詳しい事を知りたい方はそちらを参照すればよりグットでしょう。

DIB画像処理にはTBitmapを使用します。私がTBitmap使っているからと、汎用性を考えてのことです。また、殆どのフィルタは独立して動作する関数としてサンプルコードを書いています。なので、コピーして張りつければすぐに動作する関数が殆どです。中には特定のフィルタ関数を呼び出す形式のものがありますが、そのフィルタが出てくる前に必要なフィルタは解説するようにしていますので、順番に見ていけば問題はないはずです。

サンプルコードについてですが、全て24BitのDIBを対象に書かれています。また、コードは速度を優先させていますのではっきりいって汚いです。例えばIntegerをByteの範囲に飽和させるのは別関数として共有できますが、私はやっていません。なぜかというと、共有化できる関数の殆どはピクセル数だけ実行するものが多く、関数呼び出しによるオーバーヘッドが馬鹿にならないからです。640x480の画像を処理するだけでも30万回以上のピクセル処理があるので、処理速度は体感できるほどの差になります。
だからといって、あまり過剰な高速化はやっていません。2次元配列を使う所を1次元配列にしてアドレス計算を高速化させたり、インラインアセンブラでゴリゴリ書いたりはしないようにしています。

なお、関数名や変数名は英語で書いてありますが、スペルが間違っていたりしても突っ込まないでくださいね(^^;

Copyright 2001 Rinka Kouzuki All Rights Reserved.