package { import flash.display.BitmapData; public class IHistogram { public function calculate(bmd:BitmapData):Object { var ret:Object = { eBmd: new BitmapData(bmd.width, bmd.height), hBmd: null }; // Calculate histogram and eImg var histogram:Array = new Array(256); for (var i = 0; i < 360; i++) { histogram[i] = 0; } for (i = 0; i < bmd.width; i++) { for (var j = 0; j < bmd.height; j++) { var c:uint = bmd.getPixel(i, j); var r:int = c >> 16; var g:int = (c & 0x00FF00) >> 8; var b:int = (c & 0x0000FF); var v:int = int(r*0.3 + g*0.59+ b*0.11); c = v + (v << 8) + (v << 16); ret.eBmd.setPixel(i, j, c); histogram[v]++; } } ret.hBmd = toBitmapData(histogram, bmd.width); return ret; } /** * Returns a bitmap data of wx256 visualizing the histogram. */ function toBitmapData(histogram:Array, w:int):BitmapData { // Find the max so that we can normalize to the width of w var max:int = histogram[0]; for (var j:int = 1; j < 256; j++) { if (max < histogram[j]) { max = histogram[j]; } } // Visualize var normalizer:Number = w/max; var ret:BitmapData = new BitmapData(w, 256); for (j = 0; j < 256; j++) { for (var i:int = 0; i < histogram[j]*normalizer; i++) { ret.setPixel(i, j, 0x777777); } } return ret; } } }