GPSルート探索スクリプト、着実に進みます

PerlMagickでピクセル単位の色取得が可能になりました。ライブラリの機能として持っているので、出来るのは当たり前といえば当たり前の話なのですが、日本語はおろか英語ですらまともにドキュメントが無い有様で、微妙に難儀しました。母体のライブラリとなるImageMagickは、C++からでも呼び出せるらしく、gifやpngやjpg等の画像フォーマットを気にすること無くアクセスできるのは素晴らしいですね。折角高機能なのだから、ドキュメントの完備を願いたい所です。


というわけで、一応テキストとしてここに残しておきます。検索で迷い込む人が助かることを祈って(^^


$image->Read("target.png"); #ファイルのロード
$image->Resize(width=>120, height=>100,filter=>"Point"); #画像リサイズ。アンチエリアスは切ってポイントサンプルで読み込ませる(色々できます)


@r_pixel=$image->GetPixels(width=>120,height=>100,x=>0,y=>0,map=>"R"); #赤の配列を読み込み
@g_pixel=$image->GetPixels(width=>120,height=>100,x=>0,y=>0,map=>"G"); #緑の配列を読み込み

@b_pixel=$image->GetPixels(width=>120,height=>100,x=>0,y=>0,map=>"B"); #青の配列を読み込み


こうやってピクセルの色要素をそれぞれ配列として抜き出します。各ピクセルへのアクセスは


$r_my_pixel = @r_pixel[target_y * 120 + target_x];
$g_my_pixel = @g_pixel[target_y * 120 + target_x];
$b_my_pixel = @b_pixel[target_y * 120 + target_x];


この様にすれば各色を0〜1までの大きさで返してくれます。0xffを掛ければ整数の0〜255の範囲内に収まるので、24bitカラー相当として扱えます。RGB一括で読み込む方法もあるみたいですが、各色が同じ配列内にあると、逆に扱いが面倒な気がするので試してません。インタプリタであるPerlにとって、重いピクセル単位の画像処理は最も不得意な部類に入るのかもしれませんが、こうやって簡単に扱えるのは大きなアドバンテージだと思います。


ちなみに、ザウルスでもImageMagick本体は存在するようです。あとはインターフェースとなるPerlMagickですが、Debianバイナリ辺りから持ってくれば動くのでしょうか?ImageMagickだけでも3MB超なので、余程の事情が無い限りいれる気にはならないですが(^^;; でも、やろうと思えば全部ザウルス単体で出来てしまえそうなのが恐ろしいところですね。