// ロードするパッケージの宣言
import java.awt.*;
import java.awt.image.*;
//
// 画素配列形式の画像クラスMyPixelImageの定義
//
public class MyPixelImage {
int[] pixels, newpixels; // 原画像pixelsと結果画像newpixels
int w, h; // 原画像の幅wと高さh
int neww, newh; // 結果画像の幅newwと高さnewh
// コンストラクタ定義
MyPixelImage(Image original) {
// Imageクラスオブジェクトから画素配列pixelsを抽出
PixelGrabber pg = new PixelGrabber(original, 0, 0, -1, -1, true);
try {
if (pg.grabPixels()) {
w= pg.getWidth();
h= pg.getHeight();
pixels=(int[])pg.getPixels();
}
} catch(InterruptedException ie){}
// ここまで、画素配列抽出処理
newpixels = pixels; // 結果画素配列の初期化
neww = w; newh = h; // 結果画像の幅・高さの初期化
}
public int[] getImage() {
return newpixels;
}
// 結果画像の幅の参照メソッド
public int getWidth() {
return neww;
}
// 結果画像の高さの参照メソッド
public int getHeight() {
return newh;
}
// フィルタリング処理 メソッド
public void filtering(int filtermode) {
int[] result=new int[h*w]; //結果画素配列の生成
neww = w; newh = h; // 結果画像の幅と高さを設定
// フィルタリングモードに応じて処理を切り替える。
switch (filtermode) {
case 0: // 原画像そのまま
for(int y=0; y
}
}
break;
case 1: // Red成分を1.5倍
for(int y=0; y
int red = (pixels[x+y*w] & 0x00ff0000)>> 16;
// Red成分の処理---Red成分を1.5倍する
red = (int)Math.min(red*1.5, 255);
// Red成分の処理結果をARGB形式に再格納
result[x+y*neww] = (pixels[x+y*w] & 0xff00ffff) | (red << 16);
}
}
break;
case 2: // Green成分を1.5倍
for(int y=0; y
green = (int)Math.min(green*1.5, 255);
result[x+y*neww] = (pixels[x+y*w] & 0xffff00ff) | (green << 8);
}
}
break;
case 3: // Blue成分を1.5倍
for(int y=0; y
blue = (int)Math.min(blue*1.5, 255);
result[x+y*neww] = (pixels[x+y*w] & 0xffffff00) | blue;
}
}
break;
}
newpixels = result; // 結果の格納
}
}