這是常見影像處理中的Sobel邊緣偵測法~ 有興趣的人不妨玩玩哦~
相關的演算法細節~ 請參閱Google大神中的Sobel影像處理一節~
Sobel
import flash.display.BitmapData; function Sobel():Void { var myBitmapData:BitmapData = BitmapData.loadBitmap("bear"); var height:Number = myBitmapData.height; var width:Number = myBitmapData.width; var gray:Array = new Array(width); for(var i:Number = 0 ; i < width ; i++) gray[i] = new Array(height); var gray2:Array = new Array(width); for(var i:Number = 0 ; i < width ; i++) gray2[i] = new Array(height); var sobscale = 1.0; var offsetval = 0; // RGB to GRAY for(var i:Number = 0 ; i < width ; i++) { for(var j:Number = 0 ; j < height ; j++) { var rgb:Number = myBitmapData.getPixel(i,j); var r:Number = 0xFF&(rgb >> 16); var g:Number = 0xFF&(rgb >> 8); var b:Number = 0xFF&rgb; gray[i][j]= 0.299*r + 0.587*g +0.114*b; } } for(var x = 1; x < width-1;x++) { for(var y = 1; y < height-1;y++) { /** 00(a) 10(b) 20(c) 01(d) 11(*) 21(e) 02(f) 12(g) 22(h) */ var a = gray[x-1][y-1]; var b = gray[x][y-1]; var c = gray[x+1][y-1]; var d = gray[x-1][y]; var e = gray[x+1][y]; var f = gray[x-1][y+1]; var g = gray[x][y+1]; var h = gray[x+1][y+1]; var hor = (a+d+f) - (c+e+h); if(hor < 0) hor = -hor; var vert = (a+b+c) - (f+g+h); if(vert < 0) vert = -vert; var gc = (sobscale * (hor + vert)); gc = (gc + offsetval); if (gc > 255) gc = 255; gray2[x][y] = 0xff000000 |gc<<16 | gc<<8 | gc; } } //set pixel value for(var i:Number = 0 ; i < width ; i++) { for(var j:Number = 0 ; j < height ; j++) { myBitmapData.setPixel(i,j,gray2[i][j]); } } var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth()); mc.attachBitmap(myBitmapData,this.getNextHighestDepth()); } Sobel();