回転ブラー
エフェクト処理に回転ブラーを追加
こちら
ソースは右クリック
前回の放射状ブラーのソースに一行追加しただけです。
ブラーをかける角度を求めて、その値に90度を足すというコード追加しました。
//回転ブラー private function rotate_blur(ef:Number):void{ if(target_bmpData == null) return; bmpData2 = new BitmapData(target_bmpData.width, target_bmpData.height); const NN:int = 17; const NF:int = 8; var rate:Number; var xx:int, yy:int; var rr:int, gg:int ,bb:int ,oo:int; var col:Color = new Color(); var ncol:Color = new Color(); var pat_sum:int, pat:int; var rad:Number, dis:Number, disI:Number; var ox:Number, oy:Number; var disMAX:Number; var dx:Number, dy:Number; var x1:int, y1:int, x2:int, y2:int; x1=0; y1=0; //ビットマップの大きさ x2=bmpData2.width-1; y2=bmpData2.height-1; //中心からの距離の最大値を求める ox=Number(x2-x1)/2.0; oy=Number(y2-y1)/2.0; dx=Number(x2)-ox; dy=Number(y2)-oy; disMAX=Math.sqrt(dx*dx+dy*dy); for(var y:int = y1; y <= y2; y++) { for(var x:int = x1; x <= x2; x++) { rr = gg = bb = oo = 0; //x.y方向それぞれの中心からの距離を求める dx = Number(x) - ox; dy = Number(y) - oy; //dx,dyからブラーをかける角度を求める if(dx != 0.0) rad = Math.atan(dy/dx); else rad = Math.PI * 0.5; //90度ずらす rad += Math.PI * 0.5; //中心からの距離を求める dis=Math.sqrt(dx*dx+dy*dy); //ブラーの強さを求める.中心から離れるほど強い rate=ef*dis/disMAX; rate/=Number(NF); pat_sum=0; for(var i:int = 0 ; i < NN; i++){ //重み付け if(i==NF) pat=3; else pat=1; disI=Number(i-NF)*rate; xx=int(disI*Math.cos(rad))+x; yy=int(disI*Math.sin(rad))+y; ncol.color = target_bmpData.getPixel(xx,yy); //画像上の画素情報を取得 rr+=ncol.r * pat; gg+=ncol.g * pat; bb+=ncol.b * pat; oo+= pat; pat_sum+=pat; } col.r = rr/(oo); col.g = gg/(oo); col.b = bb/(oo); bmpData2.setPixel(x,y,col.color); // 画像に値をセットする } } view.bitmapData = target_bmpData = bmpData2; myImage.width = view.width = myImage.width; myImage.height = view.height = myImage.height; }