モザイク処理


エフェクト処理にモザイク処理を追加
こちらからどうぞ
ソースは右クリック


モザイク処理の流れは、
一定の範囲内の画素値を同じ値にしていきます。
その値は範囲内の画素値の平均です。


ソース

/* msx,msy モザイクの大きさ(画素数で指定)*/
private function mosaic(msx:int, msy:int):void
{
	if(target_bmpData == null) return;
	bmpData2 = new BitmapData(target_bmpData.width, target_bmpData.height);
	
	var x:int, y:int;
	var xx:int, yy:int;
	var sx:int, sy:int;
	var ex:int, ey:int;
	var bx:int, by:int;
	var rr:int, gg:int, bb:int;
	var mm:int;
	var mlx:int, mly:int, zzx:int;
	var col:Color = new Color();
	var x1:int, y1:int, x2:int, y2:int;

	x1 = 0;
	y1 = 0;
	x2 = bmpData2.width - 1;
	y2 = bmpData2.height - 1;

	if(msx==0) msx = 1;
	if(msy==0) msy = 1;
	
	mlx = (x2-x1+1+msx-1) / msx;
	mly= (y2-y1+1+msy-1) / msy;
	zzx = msx / 2;
	for(y = 0; y < mly; y++) {
	    bx = 0;
		for(x = bx; x < x2; x += msx) {
			rr = gg = bb = 0;
			
			//同一の画素値にする範囲を計算
			sx = x;
			if(x < 0) sx = 0;
			sy = y1 + y * msy;
			ex = x + msx - 1;
			ey = sy + msy - 1;
			if(ex > x2) ex = x2;
			if(ey > y2) ey = y2;
			
			for(yy = sy; yy <= ey; yy++) {
				for(xx = sx; xx <= ex; xx++) {
					col.color = target_bmpData.getPixel(xx,yy);	//画像上の画素情報を取得
					rr += col.r;
					gg += col.g;
					bb += col.b;
				}
			}
			
			mm = (ex-sx+1) * (ey-sy+1);
			if(mm) {
				rr /= mm;
				gg /= mm;
				bb /= mm;
				col.r = rr;
				col.g = gg;
				col.b = bb;
				for(yy = sy; yy <= ey; yy++) {
					for(xx = sx; xx <= ex; xx++) {
						bmpData2.setPixel(xx,yy,col.color);	// 画像に値をセットする
					}
				}
			}
		}
	}
	
	view.bitmapData = target_bmpData = bmpData2;
	myImage.width = view.width = myImage.width;
	myImage.height = view.height = myImage.height;
}