2014-03-06 22 views
0

这是我在Adobe论坛上发了一个帖子......文字锯齿/破 - 的Adobe Flash

我新望闪烁,我做了演示文稿作为的一部分大学任务。

我的问题基本上是这样的。作为我的演示文稿的一部分,我有一个照片库,它使用缩略图作为按钮,然后用UI加载器从我的网络服务器加载较大图像的弹出式版本 - 根据https://www.youtube.com/watch?v=Peo_nT9HHa0

该图像是在photoshop上创建的。它是一个.jpg,在图像中有文字,在文字下面描述图像的全部内容。 Photoshop中的文本被设置为抗锯齿“平滑”,当我在闪光灯下测试电影时,图像下方的文字看起来很好 - 就像在Photoshop中一样。

然而,当我发布和上传.swf文件到我的网络服务器,并通过浏览器中查看图像,文字看起来可怕的 - 所有的锯齿,如果这是很有意义的打破。

任何想法为什么?

他们给我的答复...

如果您加载的动态图像,那么你将不得不平滑属性真正设置文件(S)已被加载后。因此,如果当前没有用于完成加载的图像的侦听器,则需要一个侦听器,并使用事件处理函数将smoothing属性分配给它们中的每一个。

任何人都可以帮助创建此侦听器和事件处理函数的动作? 我基本上有一个画廊电影剪辑与按钮作为可点击缩略图。造成这种情况的动作是...

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

如图所示,你应该始终如果平滑上图像将被缩放。它使用不同的缩放算法,模糊像素而不是删除它们。请注意,平滑过程要慢得多,但在现代机器上,您不应该注意到它们之间的差异,除非您一次完成数千幅图像。

实例化后,加入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对象。我不认为你必须这样做,但我不记得了。

+0

感谢您的答复。我对这种事情毫无用处,所以请耐心等待。您在上面输入的动作脚本是在加载图像的同一帧中进行的?我已将两行代码粘贴到最后一张图像下面的那一行,但问题仍然存在。谢谢 – markthornton90

+0

它应该在同一帧中完成,是的。但是,如果不能分析项目,我认为我无法进一步帮助你。这是您需要使用的方法。为了记录,最好的做法是将所有代码放在一个图层中的单个帧上。它不应该分开。 –

0

只需将事件侦听器添加到加载器。就像这样:

load.addEventListener(Event.COMPLETE,doneLoad); 

然后在doneLoad功能得到event.data并投它为位图,并设置位图平滑为true:

var myBitmap:Bitmap= e.target.data as Bitmap; 
myBitmap.smoothing=true; 
//add bitmap to parent .... 
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));