BitmapUtil added cache
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user