http://blog.nariyu.jp/2015/01/canvas-image-effects/#fx-random-dither
Tutorial1Activityクラスと同じ場所にRandomDitherFilterクラスを作成します。その後、filterメソッドに以下のコードを入力します。
public int[] filter(int[] imageArray, int width, int height) {
int length = width*height;
int[] oimgArray = new int[imageArray.length];
int rgb;
int red,green,blue;
int y_val;
double rand;
for(int i =0;i < length;i++){
rgb = imageArray[i];
red = (rgb >> 16) & 0xff;
green = (rgb >> 8) & 0xff;
blue = (rgb) & 0xff;
y_val = ( 2 * red + 4 * green + blue ) / 7;
rand=Math.random()*255;//①
if(y_val>=rand){//②
y_val=255;
}else{
y_val=0;
}
oimgArray[i]=255*16777216+y_val*65536+y_val*256+y_val;
}
return oimgArray;
}
①では確率の計算用に0~1の乱数を発生させています。そして、②でピクセルの輝度が乱数以上ならば白に、乱数以下ならば黒にします。
最後に、 Tutorial1Activityクラスのint imageArray[]=ba2ia(ba);の下に以下の文を記入します。
imageArray=new RandomDitherFilter().filter(imageArray, imagewidth, imageheight);
以下に実機での実行結果を示します。白黒の二値画像ですが、Pタイル法などで2値画像にした時よりも人物の輪郭や髪の濃淡などがわかるようになっています。

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