影付きエンボス処理
エフェクト処理に影エンボス処理を追加
こんな感じ
ソースは右クリック
Sobelフィルターで微分値を取り、それを法線として影を付ける。
ソース
//影を付けたエンボス処理 private function shade_embos():void { if(target_bmpData == null) return; bmpData2 = new BitmapData(target_bmpData.width, target_bmpData.height); 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 x:int,y:int; var xx:int,yy:int; var dx:Number, dy:Number, dz:Number; var c1:int, c2:int; var rrx:int, ggx:int, bbx:int; var rry:int, ggy:int, bby:int; var rr:int, gg:int, bb:int; var col:Color = new Color(), ncol:Color = new Color(); var sobel:Array; var sadr:int; var gray:int; var x1:int, y1:int, x2:int, y2:int; x1 = 0; y1 = 0; x2 = bmpData2.width-1; y2 = bmpData2.height-1; adjustLightSourse(); for(y = y1; y <= y2; y++) { for(x = x1; x <= x2; x++) { rrx = ggx = bbx = 0; rry = ggy = bby = 0; sadr = 0; //Sobelフィルターを使って微分値を求める 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; rrx+= gray*sobel1[sadr]; rry+= gray*sobel2[sadr]; sadr++; } } dx=Number(rrx); dy=Number(rry); dz = 16.0; col.color = target_bmpData.getPixel(x+xx-1,y+yy-1); //画像上の画素情報を取得 //影を付ける rr=lighting(col.r,dx,dy,dz,(x-x1),Number(y-y1),0.0); gg=lighting(col.g,dx,dy,dz,Number(x-x1),Number(y-y1),0.0); bb=lighting(col.b,dx,dy,dz,Number(x-x1),Number(y-y1),0.0); col.r = rr; col.g = gg; col.b = bb; bmpData2.setPixel(x,y,col.color); // 画像に値をセットする } } view.bitmapData = target_bmpData = bmpData2; myImage.width = view.width = myImage.width; myImage.height = view.height = myImage.height; }