ค้นคว้า วิจัย ลองทำไปเรื่อย
ปรับค่าสี BitmapData ด้วย function Threshold (ใน actionscript3)
จากตัวอย่างข้างบน จะเป็นการปรับค่าสี BitmapData ที่ได้มาจาก webCam
สำหรับการปรับปรุงเปลี่ยนค่าสีของแต่ละ pixel ใน BitmapData เราสามารถทำได้โดย ใช้ Threshold
โดยวิธีการใช้งานมีดังนี้
1 2 3 4 | ... // bmd:BitmapData <-- bmd คือ BitmapData bmd.threshold(bmd, bmd.rect, new Point(), ">", 0xFFCCCCCC, 0xFFFF0000); // ถ้า pixel นี้มีค่า > 0xFFCCCCCC (ARGB) ให้แทนค่าด้วย 0xFFFF0000 (ARGB) ... |
ซึ่งจะเหมือนกับเราทำแบบนี้
1 2 3 4 5 6 7 8 9 | // ซึ่งจะเหมือนกับการใช้วิธีนี้เปลี่ยนค่าสี for (var i:int = 0; i < bmd.width; i++) { for (var j:int = 0 ; j < bmd.height; j++) { var pixelColor:uint = bmd.getPixel(i, j); if (pixelColor > 0xFFCCCCCC) { bmd.setPixel(i, j, 0xFFFF0000); } } } |
ดู source code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.ActivityEvent; import flash.events.Event; import flash.geom.Point; import flash.media.Camera; import flash.media.Video; import org.flashdevelop.utils.FlashConnect; public class Main extends Sprite { private var video:Video; private var webcam:Camera; private var bmpOutput:Bitmap; private var bmpData:BitmapData; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); stageConfig(); initWebCam(); this.addEventListener(Event.ENTER_FRAME, onEnterframe); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point } private function stageConfig():void { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.frameRate = 60; } private function initWebCam():void { webcam = Camera.getCamera(); if (webcam != null) { webcam.addEventListener(ActivityEvent.ACTIVITY, activityHandler); webcam.setMode(320, 240, 10, false); webcam.setQuality(0, 100); video = new Video(webcam.width, webcam.height); video.attachCamera(webcam); video.width = 320; video.height = 240; this.addChild(video); }else { FlashConnect.trace("cannot detect webcam"); //show output in flashDevelop } } private function activityHandler(e:ActivityEvent):void { //FlashConnect.trace("activate ok"); bmpData = new BitmapData(video.width, video.height); bmpData.draw(video); if (bmpOutput == null) { bmpOutput = new Bitmap(bmpData); bmpOutput.x = 350; bmpOutput.y = 0; this.addChild(bmpOutput); }else { bmpOutput.bitmapData = bmpData; } } private function onEnterframe(e:Event):void { bmpData.draw(video); filterBitmapData(bmpData); bmpOutput.bitmapData = bmpData; } private function filterBitmapData(bmd:BitmapData):void { //bmd.threshold(bmd, bmd.rect, new Point(), ">", 0xFFCCCCCC, 0xFFFF0000); /* for (var i:int = 0; i < bmd.width; i++) { for (var j:int = 0 ; j < bmd.height; j++) { var pixelColor:uint = bmd.getPixel(i, j); if (pixelColor > 0xFFCCCCCC) { bmd.setPixel(i, j, 0xFFFF0000); } } } */ bmd.threshold(bmd, bmd.rect, new Point(), ">", 0xFF808080, 0xFFffffff); bmd.threshold(bmd, bmd.rect, new Point(), "<=", 0xFF808080, 0xFF000000); } } } |
เอกสารอ้างอิง
http://www.howdoflash.net/2010/06/17/as3_color_detection/
http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/display/BitmapData.html#threshold%28%29
| Print article | This entry was posted by admin on August 13, 2010 at 2:38 pm, and is filed under AS3, BitmapData. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |



