画像処理アプリケーションまとめ



これまで、画像処理アプリケーションその1、その2でImageクラス、PixelGrabber クラス、MemoryImageSourceクラスについて、取り扱ってきました。画像を処理したい 場合はこの3つがあれば大丈夫だろうと思います。そこでまとめとして、詳しく説明 していきたいと思います。(本当はその1とかその2でやる事ですが…(汗))

Imageクラスとは、どういうものか?というと、オフスクリーンに描画できる領域を 確保するものでした。まずは、Imageクラスを宣言して生成します。

Image image;
image = createImage(485,88);//書き方は、createImage(幅,高さ);とする。

そして、これで、オフスクリーンの領域を確保したので次は、画像を読み込みます。

image = Toolkit.getDefaultToolkit().getImage(filename);
//これはほんの1例です。(アプリケーションの場合)
//アプレットの場合 image = getImage(getDocumentBase(),filename);としてもよい。

次に、PixelGrabberクラスを使ってピクセルごとのデータを取得する。

//PixelGrabberのコンストラクタは(読み取るimage,始点のx座標,始点のy座標,
//                               幅,高さ,ピクセルごとの情報を確保するための1次元配列,
//                               配列のどこから格納を始めるか,配列1列の長さ);の順番です。
PixelGrabber pg = new PixelGrabber(image,0,0,485,88,pixels,0,485);

try{
	pg.grabPixels();//ピクセルの情報を読み出すように指示する。
}catch(InterruptedException e){}

そして、この後は、ピクセルごとに色々な処理を加えます。 ここで、気をつけなければならないのは、ピクセルごとの色情報はRGBカラー値 を32ビットで表現しています。そして、どういう風な状態になっているかと言うと、 0〜7ビット…青の色情報、8〜15ビット…緑の色情報、16〜23ビット…赤の色情報 となってます。これは、気をつけてください。これを間違えると大変な事になります。 ここで、基本のプログラムを書いておきます。

for(int i=0;i<485*88;i++){
	int p=pixels[i];//ピクセルの情報を取得
    int red = 0xff & (p>>16);//赤の色情報の取得
    int green = 0xff & (p>>8);//緑の色情報の取得
    int blue = 0xff & p;//青の色情報の取得
    
    //ここでピクセルごとの処理をする
    
    pixels[i] = (0xff000000 | red<<16 | green<<8 | blue);//処理後のピクセルの情報を元に戻す
}

そして、これでピクセルごとの処理が終わったので次にMemoryImageSourceクラスを使って 結果を出力しましょう。色んな方法がありますが、とりあえず、もう1つImageクラスで オフスクリーンを確保しましょう。その後、このように書いてみましょう。

image2 = createImage(new MemoryImageSource(485,88,pixels,0,485));
//MemoryImageSource(幅,高さ,ピクセルごとの情報がある配列,配列のどこから読むか,配列1列の長さ);
//の順番です。

これで、画像処理が完成です。今回は分かりやすくしたつもりですが、感想が聞けたらいいな と思います。次は何をテーマにしようかな…。

前へ
次へ
戻る