package { import flash.display.BitmapData; public class Subtractor { public var threshold:uint; // 影化のしきい値 public var bg:BitmapData; public var bmd:BitmapData; public var shadow:Shadow; public function Subtractor() { threshold = 30; shadow = new Shadow(); bg = new BitmapData(shadow.width, shadow.height); bmd = new BitmapData(shadow.width, shadow.height); trace("construct: Subtractor"); } public function subtract():void { for (var y:int = 0; y < bg.height; y++) { for (var x:int = 0; x < bg.width; x++) { if ( comparePixels( bg.getPixel(x, y), bmd.getPixel(x, y), threshold ) ) { shadow.setPixel(x, y, true); } else { shadow.setPixel(x, y, false); } } } shadow.updateBitmapData(); } function comparePixels(a:uint, b:uint, threshold:uint):Boolean { var a_red:int = a>>16&0xFF; var b_red:int = b>>16&0xFF; var a_green:int = a>>8&0xFF; var b_green:int = b>>8&0xFF; var a_blue:int = a&0xFF; var b_blue:int = b&0xFF; if ((a_red > b_red && a_red-b_red > threshold) || (a_red < b_red && b_red-a_red > threshold) || (a_green > b_green && a_green-b_green > threshold) || (a_green < b_green && b_green-a_green > threshold) || (a_blue > b_blue && a_blue-b_blue > threshold) || (a_blue < b_blue && b_blue-a_blue > threshold) ) { return true;// 色に差がある時 } else { return false; }// 色に差が無い時 } } }