📄 imageloader.as
字号:
/**
* Class for loading, scaling and smoothing images to a given MovieClip.
*
* @example
* import com.jeroenwijering.utils.ImageLoader;
* var myLoader = new ImageLoader(this);
* myLoader.loadImage("somephoto.jpg");
*
* @author Jeroen Wijering
* @version 1.9
**/
import com.jeroenwijering.utils.*;
class com.jeroenwijering.utils.ImageLoader {
/** MovieClip Loader Instance **/
private var mcLoader:MovieClipLoader;
/** Target MovieClip **/
private var targetClip:MovieClip;
/** Target Width **/
private var targetWidth:Number;
/** Target Height **/
private var targetHeight:Number;
/** Overstretch Boolean **/
private var overStretch:String = "none";
/** Boolean that checks whether an SWF is loaded **/
private var useSmoothing:Boolean;
/** Color of a solid background the BitmapArray might detect **/
private var backColor:String;
/**
* Constructor for the ImageLoader
*
* @param tgt MovieClip to load the image into
* @param ost Overstretch parameter (true/false/fit/none)
* @param wid Width of the image target, defaults to target MC width
* @param hei Height if the image target, defaults to target MC height
*/
function ImageLoader(tgt:MovieClip,ost:String,wid:Number,hei:Number) {
targetClip = tgt;
arguments.length > 1 ? overStretch = String(ost): null;
if(arguments.length > 2) {
targetWidth = wid;
targetHeight = hei;
}
mcLoader = new MovieClipLoader();
mcLoader.addListener(this);
};
/** Switch image with bitmaparray if possible. **/
public function onLoadInit(inTarget:MovieClip):Void {
if(useSmoothing == true) {
var bmp = new flash.display.BitmapData(targetClip.mc._width,
targetClip.mc._height, true, 0x000000);
bmp.draw(targetClip.mc);
if(overStretch == "false") { fillBackColor(bmp); }
var bmc:MovieClip = targetClip.createEmptyMovieClip("smc",
targetClip.getNextHighestDepth());
bmc.attachBitmap(bmp, bmc.getNextHighestDepth(),"auto",true);
targetClip.mc.unloadMovie();
targetClip.mc.removeMovieClip();
delete targetClip.mc;
scaleImage(targetClip.smc);
} else {
scaleImage(targetClip.mc);
}
};
/* Fill the stage with a solid backcolor if that matches the image. **/
private function fillBackColor(bmp) {
var ltp="0x"+bmp.getPixel(0,0).toString(16);
var brp="0x"+bmp.getPixel(bmp.width-1,bmp.height-1).toString(16);
if(ltp == brp) {
backColor = ltp;
targetClip.createEmptyMovieClip("bck",0);
targetClip.bck.beginFill(backColor,100);
targetClip.bck.moveTo(0,0);
targetClip.bck.lineTo(targetWidth,0);
targetClip.bck.lineTo(targetWidth,targetHeight);
targetClip.bck.lineTo(0,targetHeight);
targetClip.bck.lineTo(0,0);
targetClip.bck.endFill();
} else {
delete backColor;
}
};
/** Scale the image while maintaining aspectratio **/
private function scaleImage(tgt:MovieClip):Void {
targetClip._xscale = targetClip._yscale = 100;
var tcf = tgt._currentframe;
tgt.gotoAndStop(1);
var xsr:Number = targetWidth/tgt._width;
var ysr:Number = targetHeight/tgt._height;
if (overStretch == "fit" || Math.abs(xsr-ysr) < 0.1) {
tgt._width = targetWidth;
tgt._height = targetHeight;
} else if ((overStretch == "true" && xsr > ysr) ||
(overStretch == "false" && xsr < ysr)) {
tgt._xscale = tgt._yscale = xsr*100;
} else if(overStretch == "none") {
tgt._xscale = tgt._yscale = 100;
} else {
tgt._xscale = tgt._yscale = ysr*100;
}
if(targetWidth != undefined) {
tgt._x = targetWidth/2 - tgt._width/2;
tgt._y = targetHeight/2 - tgt._height/2;
}
tgt.gotoAndPlay(tcf);
onLoadFinished();
};
/**
* Start loading an image.
*
* @param img URL of the image to load.
*/
public function loadImage(img:String):Void {
targetClip.mc.clear();
targetClip.smc.unloadMovie();
targetClip.smc.removeMovieClip();
delete targetClip.smc;
checkSmoothing(img);
var raw:MovieClip = targetClip.createEmptyMovieClip("mc",1);
mcLoader.loadClip(img,raw);
if(backColor != undefined) {
targetClip.bck.removeMovieClip();
}
};
/** Check whether smoothing can be enabled. **/
private function checkSmoothing(img:String):Void {
var idx:Number = _root._url.indexOf("/",8);
var rot:String = _root._url.substring(0,idx);
if(img.toLowerCase().indexOf(".swf") > -1 ||
_root._url.indexOf("file://") > -1) {
useSmoothing = false;
} else if (img.indexOf("http://") > -1 && img.indexOf(rot) == -1) {
useSmoothing = false;
} else if (System.capabilities.version.indexOf("7,0,") > -1 ||
img.indexOf("enclosure") > -1) {
useSmoothing = false;
} else {
useSmoothing = true;
}
};
/** Event handler; invoked when loading is in progress. **/
public function onLoadProgress(tgt:MovieClip,btl:Number,btt:Number) {};
/** Event handler; invoked when image is loaded. **/
public function onLoadFinished() { };
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -