BitmapUtil added cache
This commit is contained in:
@@ -7,14 +7,31 @@ import flash.display.BitmapData;
|
||||
|
||||
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 {
|
||||
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<Float> = [];
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user