Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
103 lines (85 sloc) 3.14 KB
package sk.yoz.image
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Matrix;
import flash.geom.Point;
import mx.controls.Image;
import sk.yoz.math.ResizeMath;
public class SmoothImage extends Image
{
protected var _resizeFunction:String = "bilinearIterative";
protected var _iterationMultiplier:Number = 2;
protected var resizedBitmap:Bitmap;
public function SmoothImage()
{
super();
}
[Bindable(event="resizeFunctionChanged")]
[Inspectable(category="Other", defaultValue="bilinearIterative",
enumeration="bilinear,bilinearIterative")]
public function set resizeFunction(value:String):void
{
if(value == resizeFunction)
return;
_resizeFunction = value;
resizeBitmap();
}
public function get resizeFunction():String
{
return _resizeFunction;
}
[Bindable(event="iterationMultiplierChanged")]
public function set iterationMultiplier(value:Number):void
{
if(value == iterationMultiplier)
return;
_iterationMultiplier = value;
resizeBitmap();
}
public function get iterationMultiplier():Number
{
return _iterationMultiplier;
}
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
resizeBitmap();
}
protected function resizeBitmap(... rest):void
{
if(!width || !height || !content)
return;
if(resizedBitmap && resizedBitmap.parent)
resizedBitmap.parent.removeChild(resizedBitmap);
resizedBitmap = new Bitmap(resizedBitmapData);
addChild(resizedBitmap);
content.visible = false;
}
protected function get resizeMethod():String
{
return maintainAspectRatio ? ResizeMath.METHOD_LETTERBOX
: ResizeMath.METHOD_RAW;
}
protected function get resizedBitmapData():BitmapData
{
var bitmapData:BitmapData;
if(content is Bitmap)
{
bitmapData = Bitmap(content).bitmapData
}
else
{
bitmapData = new BitmapData(content.width / content.scaleX,
content.height / content.scaleY, true, 0);
bitmapData.draw(content);
}
var dimensions:Point = ResizeMath.newDimensions(
new Point(bitmapData.width, bitmapData.height),
new Point(width, height), resizeMethod, true);
return ImageResizer[resizeFunction](bitmapData, dimensions.x,
dimensions.y, resizeMethod, true, iterationMultiplier);
}
}
}
You can’t perform that action at this time.