Actionscript 3 如何调整动态加载到flash中的图像大小(as3)
我正在努力寻找正确的as3代码来调整图像的大小,一旦它被动态调用到舞台上并放置在MC中。 我使用以下方式加载:Actionscript 3 如何调整动态加载到flash中的图像大小(as3),actionscript-3,flash-cs4,image-scaling,image-resizing,Actionscript 3,Flash Cs4,Image Scaling,Image Resizing,我正在努力寻找正确的as3代码来调整图像的大小,一旦它被动态调用到舞台上并放置在MC中。 我使用以下方式加载: var myLoader :Loader = new Loader(); mc.addChild(myLoader); var url :URLRequest = new URLRequest("myimage.jpg"); myLoader .load(url ); 舞台最终将全屏打开(工作正常),因此我需要保持图像的原始大小,这比舞台大得多 我需要做的是在加载时将其收缩到与舞
var myLoader :Loader = new Loader();
mc.addChild(myLoader);
var url :URLRequest = new URLRequest("myimage.jpg");
myLoader .load(url );
舞台最终将全屏打开(工作正常),因此我需要保持图像的原始大小,这比舞台大得多
我需要做的是在加载时将其收缩到与舞台相同的高度,同时保持宽度成比例(哦,并将其居中)。
我尝试了各种代码,但找不到任何工作,因为我所做的只是调整包含图像的MC的大小,而不是图像本身。
如能提供有关正确代码的任何指导,将不胜感激
我猜这很简单
"myimage".x=600;
但是如果是这样的话,写图片名称的正确方法是什么,就像我写的那样,似乎是错误的。
非常感谢
Ed您需要添加一个侦听器来侦听正在加载的初始化事件 而且您不需要调整image.jpg文件本身的大小(并且您试图解决它的方式也行不通)。您可以改为调整加载程序的大小 如果您查看LoaderInfo的AS3文档,您将在最后找到一个示例,该示例演示如何添加侦听器。(请注意,侦听器被添加到contentLoaderInfo对象,而不是加载程序本身)
然后,您可以使用事件处理程序来调整大小。AS3文档在initHandler中显示了一个示例,该示例只跟踪了一些内容。如果您加载了loader.x=600,那么您将得到所需的内容。您必须等待图像加载,然后可以调整加载程序的大小,例如:
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
public class Test extends Sprite {
public function Test(){
super();
if (stage) {
init();
} else {
addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
}
}
public var mc:MovieClip;
private function init(e:Event=null):void{
if (e!=null) {
e.target.removeEventListener(e.type, arguments.callee);
}
mc = new MovieClip();
addChild(mc);
var myLoader:Loader = new Loader();
mc.addChild(myLoader);
// listen when the image is fully loaded
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
var url :URLRequest = new URLRequest("myimage.jpg");
myLoader.load(url);
}
private function onImageLoaded(e:Event):void {
var li:LoaderInfo = e.target as LoaderInfo;
li.removeEventListener(e.type, arguments.callee);
// resize the loader while preserving ratio
var ldr:Loader=li.loader;
var mw:Number = stage.stageWidth / ldr.width;
var mh:Number = stage.stageHeight / ldr.height;
var ratio:Number = (mw < mh) ? mw : mh;
ldr.width *= ratio; // you can also use ldr.scaleX=ratio;
ldr.height *= ratio; // you can also use ldr.scaleY=ratio;
// center mc on stage
mc.x=0.5*(stage.stageWidth-mc.width);
mc.y=0.5*(stage.stageHeight-mc.height);
}
}
}
包{
导入flash.display.MovieClip;
导入flash.display.Sprite;
导入flash.display.DisplayObject;
导入flash.display.Loader;
导入flash.display.LoaderInfo;
导入flash.events.Event;
公共类测试扩展了Sprite{
公共功能测试(){
超级();
如果(阶段){
init();
}否则{
addEventListener(Event.ADDED_TO_STAGE,init,false,0,true);
}
}
公共var-mc:MovieClip;
私有函数init(e:Event=null):void{
如果(e!=null){
e、 removeEventListener(e.type,arguments.callee);
}
mc=新的MovieClip();
addChild(mc);
var myLoader:Loader=new Loader();
mc.addChild(myLoader);
//当图像完全加载时收听
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onImageLoaded);
var url:URLRequest=newurlRequest(“myimage.jpg”);
加载(url);
}
私有函数onImageLoaded(e:事件):void{
变量li:LoaderInfo=e.target作为LoaderInfo;
removeEventListener(e.type,arguments.callee);
//在保留比率的同时调整加载程序的大小
变量ldr:Loader=li.Loader;
var mw:数量=阶段宽度/ldr宽度;
var mh:数量=舞台高度/ldr高度;
var比率:数值=(mw
您也可以在尝试加载程序类 他们在简化和简化加载过程方面做得很好,而且还有一些额外的好处 检查ImageLoader类 特别是如何在加载之前设置一组可选的vars属性 下面是文档中给出的示例的一个小摘录 //create an ImageLoader: var loader:ImageLoader = new ImageLoader("img/photo1.jpg", //here's the sweet part :) {name:"photo1", container:this, x:180, y:100, width:200, //here you could set the stageWidth for instance height:150, //and the stageHeight here scaleMode:"proportionalInside", //this one will definitely help you , check the docs! centerRegistration:true, onComplete:onImageLoad}); //创建图像加载器: var-loader:ImageLoader=newimageloader(“img/photo1.jpg”, //这是最甜蜜的部分:) {名称:“照片1”, 集装箱:这个,, x:180, y:100, 宽度:200,//这里您可以设置stageWidth作为示例 高度:150,//这里的舞台扶手 scaleMode://这一个肯定会帮助你,检查文档! 中心注册:对, onComplete:onImageLoad});
我在上面的代码中有很多错误,显然我说不能使用嵌套的公共类或soemthing,所以我删除了包和公共函数,并让它使用这段代码
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
var myLoader:Loader = new Loader();
mc.addChild(myLoader);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
var url :URLRequest = new URLRequest("im1.jpg");
myLoader.load(url);
function onImageLoaded(e:Event):void {
var bit:Bitmap = e.target.content;
if(bit != null)
bit.smoothing = true;
var li:LoaderInfo = e.target as LoaderInfo;
li.removeEventListener(e.type, arguments.callee);
var ldr:Loader=li.loader;
var mw:Number = stage.stageWidth / ldr.width;
var mh:Number = stage.stageHeight / ldr.height;
var ratio:Number = (mw < mh) ? mw : mh;
ldr.width *= ratio; // you can also use ldr.scaleX=ratio;
ldr.height *= ratio; // you can also use ldr.scaleY=ratio;
mc.x=0.5*(stage.stageWidth-mc.width);
mc.y=0.5*(stage.stageHeight-mc.height);
}
导入flash.display.MovieClip;
导入flash.display.Sprite;
导入flash.display.DisplayObject;
导入flash.display.Loader;
导入flash.display.LoaderInfo;
导入flash.events.Event;
var myLoader:Loader=new Loader();
mc.addChild(myLoader);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onImageLoaded);
var url:URLRequest=newurlRequest(“im1.jpg”);
加载(url);
函数onImageLoaded(e:事件):void{
变量位:位图=e.target.content;
如果(位!=null)
位平滑=真;
变量li:LoaderInfo=e.target作为LoaderInfo;
removeEventListener(e.type,arguments.callee);
变量ldr:Loader=li.Loader;
var mw:数量=阶段宽度/ldr宽度;
var mh:数量=舞台高度/ldr高度;
var比率:数值=(mw
甚至在那里添加了一些平滑。
我需要研究一下,因为我不确定公共和私人职能之间的区别是什么
还有一个问题,我可以成功地动态加载图像,如果它们与正在加载它们的swf位于同一文件夹中,但是如果我尝试将图像保存在单独的文件中,并使用类似于
var url:URLRequest…等(“stills/image1.jpg”);他们就是不肯装。有什么不对劲吗
再次感谢您的帮助
埃德我试着回答你的问题
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
var myLoader:Loader = new Loader();
var image:Bitmap;
var url :URLRequest = new URLRequest("im1.jpg");
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
myLoader.load(url);
function onImageLoaded(e:Event):void {
image = new Bitmap(e.target.content.bitmapData);
var mw:Number = stage.stageWidth;
var mh:Number = stage.stageHeight;
/* if you set width and height image same with the stage use this */
image.width = mw;
image.height = mh;
mc.addChild(image);
}
我正在查找如何调整图像大小,我发现了这个方便的库 当flash缩小图像时,当您将其调整一半大小时,它的质量最好,然后继续调整一半大小,直到达到所需的大小 图书馆为你做了所有这些 网站上有一些例子
img1_mc.scaleX = (stage.stageWidth/img1_mc.width)
img1_mc.scaleY = (stage.stageHeight/img1_mc.height)
uiloader.autoLoad = true;
uiloader.scaleContent = true;
uiloader.source = "photos/yourphoto.jpg";
var my_loader:Loader = new Loader();
my_loader.load(new URLRequest("underwater.jpg"));
var holder:MovieClip=new MovieClip();
my_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(){
my_loader.content.width = stage.stageWidth;
my_loader.content.height = stage.stageHeight;