package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.Shape; import flash.display.Sprite; import flash.events.MouseEvent; import flash.geom.Rectangle; [SWF( width="400", height="400", backgroundColor="0xEEEEEE" ) ] public class Bible_638_getColorBoundsRect2 extends Sprite { private var w:int = 400; private var h:int = 400; private var colorPalette:Array = [ 0x000066, 0x006600, 0x660000, 0x666600, 0x006666, 0x660066, 0x666666 ]; private var bmpData:BitmapData; private var outline:Shape; private var shapeStage:Sprite; public function Bible_638_getColorBoundsRect2() { super(); shapeStage = new Sprite(); addChild( shapeStage ); makeRndShapes( 12, shapeStage ); bmpData = new BitmapData( w, h ); bmpData.draw( shapeStage ); addEventListener( MouseEvent.CLICK, clickHandler ); buttonMode = true; var bmp:Bitmap = new Bitmap( bmpData ); var container:Sprite = new Sprite(); addChild( container ); container.addChild( bmp ); outline = new Shape(); addChild( outline ); } private function makeRndShapes( n:int, sprite:Sprite ):void { for( var i:int = 0; i < n; i++ ) { sprite.graphics.lineStyle( 0, 0x000000, 0.0 ); sprite.graphics.beginFill( getRndEle( colorPalette ) as uint, 0.5 ); var radius:int = rndRangeInt( 20, 100 ); if( rndRangeInt( 0, 1 ) ) { sprite.graphics.drawCircle( rndRangeInt( radius, w - radius ), rndRangeInt( radius, h - radius ), radius ); } else { sprite.graphics.drawEllipse(rndRangeInt( radius, w - radius ), rndRangeInt( radius, h - radius ), rndRangeInt( 20, 100 ), rndRangeInt( 20, 100 ) ); } } } private function clickHandler( e:MouseEvent ):void { var color:uint = bmpData.getPixel32( mouseX, mouseY ); var rect:Rectangle = bmpData.getColorBoundsRect( 0xFFFFFFFF, color ); outline.graphics.clear(); outline.graphics.lineStyle( 1, 0x000000, 1 ); outline.graphics.drawRect( rect.x, rect.y, rect.width, rect.height ); } private function getRndEle( a:Array ):Object { return a[ Math.floor( Math.random() * a.length ) ]; } private function rndRangeInt( low:int, high:int ):int { var dif:int = high - low + 1; var rnd:int = Math.floor( Math.random() * dif ) + low; return rnd; } } }