BitmapUtil added cache

This commit is contained in:
2015-07-03 10:33:04 +03:00
parent 1df0857db3
commit 6687bc83d1

View File

@@ -7,14 +7,31 @@ import flash.display.BitmapData;
class BitmapUtil { class BitmapUtil {
private static var cache:Map<BitmapData, Map<String, BitmapData>> = new Map<BitmapData, Map<String, BitmapData>>();
private static function fromCache(image:BitmapData, key:String):Null<BitmapData> {
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<String, BitmapData>());
cache.get(image).set(key, value);
}
public static function multiply(image:BitmapData, m:Float):BitmapData { 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 ct:ColorTransform = new ColorTransform(m, m, m, 1.0, 0, 0, 0);
var out:BitmapData = image.clone(); var out:BitmapData = image.clone();
out.colorTransform(out.rect, ct); out.colorTransform(out.rect, ct);
toCache(image, "multiply:" + m, out);
return out; return out;
} }
public static function grayscale(image:BitmapData, m:Float):BitmapData { public static function grayscale(image:BitmapData, m:Float):BitmapData {
var result = fromCache(image, "grayscale:" + m);
if (result != null) return result;
var matrix:Array<Float> = []; var matrix:Array<Float> = [];
matrix = matrix.concat([m, m, m, 0, 0]); matrix = matrix.concat([m, m, m, 0, 0]);
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 cmf:ColorMatrixFilter = new ColorMatrixFilter(matrix);
var out:BitmapData = image.clone(); var out:BitmapData = image.clone();
out.applyFilter(out, out.rect, new Point(0,0), cmf); out.applyFilter(out, out.rect, new Point(0,0), cmf);
toCache(image, "grayscale:" + m, out);
return out; return out;
} }
} }