輪郭強調
エフェクト処理に輪郭強調を追加
こんな感じ
ソースは右クリックで
エッジ部分を選択した色で塗りつぶす処理。
まず、エッジを抽出
//エッジ抽出 for(yy = 0;yy < 3; yy++) { for(xx = 0;xx < 3; xx++) { col.color = target_bmpData.getPixel(x+xx-1, y+yy-1); //画像上の画素情報を取得 rr = col.r; gg = col.g; bb = col.b; gray = (bb*28+77*rr+gg*151)/256; rrx += gray*sobel1[sadr]; rry += gray*sobel2[sadr]; sadr++; } }
そして、強度を求める
//エッジの強度を求める rate = int(Math.sqrt(Number(rrx*rrx + rry*rry)));
エッジ部分を塗る色を求める
//エッジの強度に応じて色を混ぜ合わせる
col.r = (r1*rate + rr*(1000-rate)) / 1000;
col.g = (g1*rate + gg*(1000-rate)) / 1000;
col.b = (b1*rate + bb*(1000-rate)) / 1000;
この計算式だとエッジが強いほど指定した色に近づいていきます。
今回のソース
/輪郭強調 private function edge_emphasis(r1:int, g1:int, b1: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 hh:int; var du:int, dd:int, dl:int, dr:int; var rrx:int, ggx:int, bbx:int; var rry:int, ggy:int, bby:int; var rr:int, gg:int, bb:int, gray:int; var rate:int; var col:Color = new Color(); var sobel:Array = []; var sadr:int; var sobel1:Array=[ 1, 0,-1, 2, 0,-2, 1, 0,-1]; var sobel2:Array=[ 1, 2, 1, 0, 0, 0, -1,-2,-1]; var x1:int, y1:int, x2:int, y2:int; x1 = 0; y1 = 0; x2 = bmpData2.width - 1; y2 = bmpData2.height - 1; for(y = y1; y <= y2; y++) { for(x = x1; x <= x2; x++) { rrx = ggx = bbx = 0; rry = ggy = bby = 0; sadr = 0; //エッジ抽出 for(yy = 0;yy < 3; yy++) { for(xx = 0;xx < 3; xx++) { col.color = target_bmpData.getPixel(x+xx-1, y+yy-1); //画像上の画素情報を取得 rr = col.r; gg = col.g; bb = col.b; gray = (bb*28+77*rr+gg*151)/256; rrx += gray*sobel1[sadr]; rry += gray*sobel2[sadr]; sadr++; } } //エッジの強度を求める rate = int(Math.sqrt(Number(rrx*rrx + rry*rry))); if(rate > 1000) rate = 1000; col.color = target_bmpData.getPixel(x, y); //画像上の画素情報を取得 rr = col.r; gg = col.g; bb = col.b; //エッジの強度に応じて色を混ぜ合わせる col.r = (r1*rate + rr*(1000-rate)) / 1000; col.g = (g1*rate + gg*(1000-rate)) / 1000; col.b = (b1*rate + bb*(1000-rate)) / 1000; bmpData2.setPixel(x, y, col.color); // 画像に値をセットする } } view.bitmapData = target_bmpData = bmpData2; myImage.width = view.width = myImage.width; myImage.height = view.height = myImage.height; }