图像中的文字是锯齿状/破碎 - Adob​​e Flash

时间:2014-03-06 12:59:54

标签: image actionscript-3 flash

这是我在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);
}

3 个答案:

答案 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));