diff --git a/haxework/gui/utils/BitmapUtil.hx b/haxework/gui/utils/BitmapUtil.hx index 83a2960..da5357c 100755 --- a/haxework/gui/utils/BitmapUtil.hx +++ b/haxework/gui/utils/BitmapUtil.hx @@ -7,14 +7,31 @@ import flash.display.BitmapData; class BitmapUtil { + private static var cache:Map> = new Map>(); + + private static function fromCache(image:BitmapData, key:String):Null { + return cache.exists(image) && cache.get(image).exists(key) ? cache.get(image).get(key) : null; + } + + private static function toCache(image:BitmapData, key:String, value:BitmapData):Void { + if (!cache.exists(image)) cache.set(image, new Map()); + cache.get(image).set(key, value); + } + + public static function multiply(image:BitmapData, m:Float):BitmapData { + var result = fromCache(image, "multiply:" + m); + if (result != null) return result; var ct:ColorTransform = new ColorTransform(m, m, m, 1.0, 0, 0, 0); var out:BitmapData = image.clone(); out.colorTransform(out.rect, ct); + toCache(image, "multiply:" + m, out); return out; } public static function grayscale(image:BitmapData, m:Float):BitmapData { + var result = fromCache(image, "grayscale:" + m); + if (result != null) return result; var matrix:Array = []; matrix = matrix.concat([m, m, m, 0, 0]); matrix = matrix.concat([m, m, m, 0, 0]); @@ -23,6 +40,7 @@ class BitmapUtil { var cmf:ColorMatrixFilter = new ColorMatrixFilter(matrix); var out:BitmapData = image.clone(); out.applyFilter(out, out.rect, new Point(0,0), cmf); + toCache(image, "grayscale:" + m, out); return out; } } \ No newline at end of file