Tutorial1Activityクラスと同じ場所にSaturationFilterクラスを作成します。その後、filterメソッドに以下のコードを入力します。
public int[] filter(int[] imageArray, int width, int height, int value) {
HSVTrans trans=new HSVTrans();
int length = width*height;
int[] oimgArray = new int[imageArray.length];
int hsv[]=new int[3];
for(int i =0;i < length;i++){
hsv=trans.RGBtoHSV(imageArray[i]);//①
hsv[1]+=value;//②
if(hsv[1] > 255){
hsv[1]=255;//③
}else if(hsv[1] < 0){
hsv[1]=0;//③
}
oimgArray[i]=trans.HSVtoRGB(hsv);
}
return oimgArray;
}
①ではRGB値を含むint型の値をHSV配列に変換します。②ではHSVのなかでSに任意の値(メソッドの第4引数)を加えます。
③では②で変化したSの値が0~255の範囲となるように値をまるめます。
④ではHSVの値をRGBに戻します。
最後に、 Tutorial1Activityクラスのint imageArray[]=ba2ia(ba);の下に以下の文を記入します。
imageArray=new SaturationFilter().filter(imageArray, imagewidth, imageheight, 30);
メソッドの第4引数が変化させる彩度の値を示します。
以下に実機での実行結果を示します。元の画像から少し鮮やかさが増しているのがわかります。

0 件のコメント:
コメントを投稿