回転ブラー


エフェクト処理に回転ブラーを追加
こちら
ソースは右クリック


処理後の画像



前回の放射状ブラーのソースに一行追加しただけです。
ブラーをかける角度を求めて、その値に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;
}