这是我在adobe论坛上发表的一篇文章......
我很喜欢闪光灯,而且我正在做一个演示,作为大学任务的一部分。
我的问题基本上就是这个。作为演示文稿的一部分,我有一个照片库,它使用缩略图作为按钮,然后使用UI加载器从我的网络服务器加载更大图像的弹出版本 - 按照https://www.youtube.com/watch?v=Peo_nT9HHa0
图片是在photoshop上创建的。它是一个.jpg,在图像中有文字,在其下面描述图像的全部内容。 photoshop中的文本设置为抗锯齿“平滑”,当我在flash中测试电影时,图像下面的文字看起来很好 - 就像在photoshop中一样。
然而,当我发布并将.swf文件上传到我的网络服务器并通过浏览器查看图像时,文本看起来很糟糕 - 如果这有意义的话,所有的锯齿都会破碎。
任何想法为什么?
我得到了回复......
如果要动态加载图像,则必须在加载文件后将smoothing属性设置为true。因此,如果您当前没有完成加载的图像的监听器,您将需要一个,以及一个事件处理函数来为每个映像分配平滑属性为true。
任何人都可以帮助为这个监听器和事件处理函数创建动作脚本吗? 我基本上有一个带有按钮的画廊电影剪辑,可以作为可点击的缩略图。动作原因是......
btnImage1.addEventListener(MouseEvent.CLICK, loadimage1);
function loadimage1 (event:MouseEvent):void{
imagetxt.text = "a";
togglewindow.gotoAndPlay(2)
}
然后是一个UI加载程序,在单击缩略图时显示较大的图像
if (MovieClip(this.parent).imagetxt.text == "a"){
var imgurl:String ="IMAGE URL";
var myrequest:URLRequest = new URLRequest(imgurl);
myloader.load(myrequest);
}
答案 0 :(得分:0)
如上所示,如果要缩放图像,您应该始终打开平滑。它使用不同的缩放算法来模糊像素而不是删除它们。请注意,它平滑得慢得多,但在现代机器上你不应该注意到差异,除非你同时对成千上万的图像进行处理。
实例化后,将Event.COMPLETE
处理程序添加到Loader.contentLoaderInfo
。
var myLoader = new Loader();
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteHandler);
然后在处理程序中,您可以访问Bitmap
并启用平滑功能。
function loaderCompleteHandler(e:Event):void {
var image:Bitmap = myLoader.content as Bitmap; //Loader.content is typed as a DisplayObject, so we need to cast it as a Bitmap
image.smoothing = true;
}
这应该可以解决问题。您可能需要将image
对象添加到舞台而不是myLoader
对象。我不认为你必须这样做,但我记不住了。
答案 1 :(得分:0)
只需将事件监听器添加到您的加载器即可。像这样:
load.addEventListener(Event.COMPLETE,doneLoad);
然后在doneLoad函数中获取event.data并将其转换为Bitmap并将位图平滑设置为true:
var myBitmap:Bitmap= e.target.data as Bitmap;
myBitmap.smoothing=true;
//add bitmap to parent ....
答案 2 :(得分:0)
我为你写了加载图像的通用方法,你应该将3个参数传递给方法:大图像的支架,图像路径和矩形,以限制图像边界并调整它们的大小。这种方法应该足以完成你的任务。
private function loadImage(holder:DisplayObjectContainer, path:String, bounds:Rectangle):void {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (e:Event):void {
var bitmap:Bitmap = loader.content as Bitmap;
if (bitmap != null) {
bitmap.smoothing = true;
//Resize bitmap to fit bounds
var availableRatio:Number = bounds.width / bounds.height;
var componentRatio:Number = bitmap.width / bitmap.height;
if (componentRatio > availableRatio) {
bitmap.width = bounds.width;
bitmap.height = bounds.width / componentRatio;
} else {
bitmap.width = bounds.height * componentRatio;
bitmap.height = bounds.height;
}
//Clear previous
var i:uint, len: uint = holder.numChildren, old: Bitmap;
for(i; i < len; ++i){
old = holder.removeChildAt(0) as Bitmap;
old.bitmapData.dispose();
}
//Here you can add some appear animation
bitmap.x = bounds.x + ((bounds.width - bitmap.width) >> 1);
bitmap.y = bounds.y + ((bounds.height - bitmap.height) >> 1);
holder.addChild(bitmap);
}
});
loader.load(new URLRequest(path));
}
用法:
loadImage(myContainer, "Path-to-Image", new Rectangle(20, 20, 400, 200));