解説
Perlでは、Image::BMPモジュールでBMP画像を扱うことができる。このモジュールを使えば、BMP画像で特定の色になっているピクセルの座標をすべて抽出することができる。
例えば、以下に掲げるスクリプトは、example32x32.bmp という黒地に紫の四角が描かれたBMP画像の中から、紫になっているピクセルの座標をすべて調べ上げて、result.txt に結果を出力する。
スクリプト
use strict; use warnings; use utf8; # ビットマップを扱うためのモジュール use Image::BMP; # 結果を書き出すファイルの指定 my $filename = './result.txt'; open(OUT, ">$filename") or die; # 検索したい色を16進形式で my $search_color = "FF00FF"; # 紫色 # 16 進数を10進数に変換 $search_color = hex($search_color); # Image::BMPオブジェクトの生成 my $img = new Image::BMP( file => 'example32x32.bmp', # 開くファイル debug => 1 # 最低限のデバッグ情報を出力 ); # BMPファイルの幅と高さを取得 my ($iW, $iH) = ($img->{Width}, $img->{Height}); # 結果のヘッダーの書き出し print OUT "X\tY\n"; # BMPの全てのピクセルについて調査 for(my $iX=0; $iX<$iW; $iX++){ for(my $iY=0 ; $iY<$iH; $iY++){ my $color = $img->xy($iX,$iY); if($color == $search_color){ print OUT $iX, "\t", $iY, "\n"; } } } close OUT;
出力される結果
X Y 8 10 8 11 8 12 8 13 8 14 8 15 8 16 8 17 9 10 9 11 9 12 9 13 9 14 9 15 9 16 9 17 10 10 10 11 10 12 10 13 10 14 10 15 10 16 10 17 11 10 11 11 11 12 11 13 11 14 11 15 11 16 11 17 12 10 12 11 12 12 12 13 12 14 12 15 12 16 12 17 13 10 13 11 13 12 13 13 13 14 13 15 13 16 13 17 14 10 14 11 14 12 14 13 14 14 14 15 14 16 14 17 15 10 15 11 15 12 15 13 15 14 15 15 15 16 15 17 16 10 16 11 16 12 16 13 16 14 16 15 16 16 16 17 17 10 17 11 17 12 17 13 17 14 17 15 17 16 17 17
脚注
- ここに表示されているのはpngファイルに変換されたものである。 [↩]