画像をRGBに抽出分解 undo forked:3favorite:2lines:82license : MIT License modified : 2009-11-06 19:22:30 Embed Tweet <?xml version = "1.0" encoding = "utf-8"?> <mx:Application xmlns:mx = "http://www.adobe.com/2006/mxml" layout = "absolute" applicationComplete = "init();"> <mx:Script> <![CDATA[ private var source:Loader; private var red:Bitmap = new Bitmap(); private var green:Bitmap = new Bitmap(); private var blue:Bitmap = new Bitmap(); private var fr:FileReference = new FileReference(); private function init():void { source = new Loader(); source.contentLoaderInfo.addEventListener(Event.COMPLETE, onSourceLoadComp); //ここでロードしてもCompleteイベント出してくれないのはなぜ? //var defImgSrc:URLRequest = new URLRequest("http://wonderfl.net/static/tmp/related_images/画像URLs"); //source.load(defImgSrc); this.image.addChild(source); this.image.addChild(red); this.image.addChild(green); this.image.addChild(blue); green.x = blue.x = this.width/2; } private function onSourceLoadComp(evt:Event):void { trace("onSourceComp"); var bm:Bitmap = source.content as Bitmap; //RGBに分解して描画 drawRGB(bm.bitmapData); //サイズを調整 reScale(); } //参照ボタンを押した private function onBrowseBtnClick():void { //画像ファイルを参照 this.fr.addEventListener(Event.SELECT, onFileSelect); this.fr.browse([new FileFilter("Image", "*.jpg;*.gif;*.png")]); } private function onFileSelect(evt:Event):void { this.fr.removeEventListener(Event.SELECT, onFileSelect); this.fr.addEventListener(Event.COMPLETE, onFileComplete); this.fr.load(); } private function onFileComplete(evt:Event):void { //画像をsource:Loaderでロード this.fr.removeEventListener(Event.COMPLETE, onFileComplete); this.source.loadBytes(this.fr.data); //イベントはinit();内で定義済み } private function drawRGB(bmd:BitmapData):void { var rgb:uint; var r:uint; var g:uint; var b:uint; var redbmd:BitmapData = new BitmapData(bmd.width,bmd.height); var greenbmd:BitmapData = new BitmapData(bmd.width,bmd.height); var bluebmd:BitmapData = new BitmapData(bmd.width,bmd.height); for(var i:int = 0; i < bmd.width; i++) { for(var j:int = 0; j < bmd.height; j++) { //pixごとの色情報を取得します rgb = bmd.getPixel(i,j); //色情報をr,g,bに分解します r = rgb >> 16 & 0xff; g = rgb >> 8 & 0xff; b = rgb & 0xff; //各BitmapDataにsetPixel redbmd.setPixel(i,j,r << 16); greenbmd.setPixel(i,j,g << 8); bluebmd.setPixel(i,j,b); } } //終わったら、Bitmapに渡します red.bitmapData = redbmd; green.bitmapData = greenbmd; blue.bitmapData = bluebmd; } private function reScale():void { var maxW:Number = this.width / 2; var maxH:Number = this.height / 2; var newScale:Number = Math.min(maxW / source.content.width, maxH / source.content.height); source.scaleX = source.scaleY = red.scaleX = red.scaleY = green.scaleX = green.scaleY = blue.scaleX = blue.scaleY = newScale; source.x = red.x = maxW - source.width; red.y = green.y = source.height; } ]]> </mx:Script> <mx:Image id="image"/> <mx:Button id = "browseBtn" label = "参照" x="10" y="10" click = "onBrowseBtnClick();" /> </mx:Application> Code Fullscreen Preview Fullscreen YAZUMA yumgsta : BitmapDatacolorRGB bitmapdata color rgb sort new page view favorite forked pv0 forked from: 画像をRGBに抽出分解 muu141 forked:0 favorite:0lines:83 (diff:76) pv190 forked from: 画像をRGBに抽出分解 hack_alt forked:0 favorite:0lines:83 (diff:1) pv2757 copyChannel()で一発コピー可能でした^^;for.. undo forked:3 favorite:10lines:73 (diff:12) tag: RGB変換 bitmapdata color copyChannel