Image AS3:如何最终平滑从外部服务器加载的位图图像

Image AS3:如何最终平滑从外部服务器加载的位图图像,image,actionscript-3,flash,bitmap,Image,Actionscript 3,Flash,Bitmap,这个问题已经跟了我差不多一年了,为了我和所有人,我想把它扼杀 我正在做一些横幅广告,需要从客户的网站上加载图像来显示。当我试着用AS2做这件事时,我发现AS2不允许你这么做。这是语言中的一个错误。本地服务器上的图像有一些变通方法,但是从中加载的图像不允许共享其位图数据,因此这些变通方法不起作用。在大约两个月的时间里,我把头撞在桌子上,咒骂Macromedia,最后我投降了 现在我们正在谈论迁移到AS3(最终),我真的很兴奋。或者,我真的很兴奋,直到我开始做一些图像质量测试,发现这里的图像质量几乎

这个问题已经跟了我差不多一年了,为了我和所有人,我想把它扼杀

我正在做一些横幅广告,需要从客户的网站上加载图像来显示。当我试着用AS2做这件事时,我发现AS2不允许你这么做。这是语言中的一个错误。本地服务器上的图像有一些变通方法,但是从中加载的图像不允许共享其位图数据,因此这些变通方法不起作用。在大约两个月的时间里,我把头撞在桌子上,咒骂Macromedia,最后我投降了

现在我们正在谈论迁移到AS3(最终),我真的很兴奋。或者,我真的很兴奋,直到我开始做一些图像质量测试,发现这里的图像质量几乎没有变化。这是我对AS2的一次重复:IDE中的所有东西都能完美加载,我感到非常兴奋,我将SWF移到测试服务器上在线运行,然后发出咔嚓声。到处都是锯齿

我在网上读过很多解决方案,但都不管用。这些措施包括:

  • 将target.content.smoothing设置为“true”。在IDE中工作得很好。所有改进都会在浏览器中消失

  • 将target.scaleX=target.scaleY设置为1.01。它只是打破了swf

  • 将“new LoaderContext(true)”添加到load命令的我的参数中。什么也不做

  • 将target.content.pixelSnapping设置为“始终”。在IDE中看起来很完美,而不是在浏览器中

  • 正在设置crossdomain.xml文件。图像正在显示-它们正在被加载,即使是锯齿状的,所以客户端服务器上必须有一个运行正常的跨域文件,对吗

所以现在我只是被卡住了,心碎了。有谁能对我的代码提供一些见解,以及为什么它的渲染效果可能不如它应该的那么漂亮?这是我正在制作的快速演示的客户端安全版本(只有图像URL已被删除,其他内容与现在一样):

事先非常感谢。任何帮助都将不胜感激

更新:以下是HTML嵌入代码:

<div id="swf_mr_sc_wt_si"></div>

<script type="text/javascript">
<!--
var swfurl = "http://DOMAIN_WITHELD_SORRY/static/AS3.swf?m=DEFAULT&t=" + (new Date().getTime());
swfobject.embedSWF(swfurl, "swf_mr_sc_wt_si", 300, 250, "8.0.0", "");
// -->
</script>

<p>


希望这有帮助


进一步更新:我们没有列在crossdomain.xml文件中。但我们仍然可以加载锯齿状的图像。当加载到IDE中运行的同一swf中时,这些图像是平滑的。我想我在这里缺少了对某种虚构知识的理解,因为我读到的所有东西都指向我能够做到这一点。这非常令人困惑。

这是因为您正在加载的图像位于另一个域上,而该域的crossdomain.xml不包含.swf所在的域,基本上授予了.swf访问图像像素数据的“权限”(是的,仅在从另一个域加载的图像上启用平滑需要与使用BitmapData.draw()读取像素数据时相同的安全性,这有点奇怪)。在本地安全沙箱中运行时,限制更加宽松,这就是为什么它在IDE中运行

即使您的域是crossdomain.xml中已批准的域,您也可能需要告诉Flash Player在加载图像时将
new Loader Context(true)
作为第二个参数发送到
Loader.load()
,以检查策略文件


编辑:我最初认为使用loadBytes()是一种解决办法,但事实并非如此。我删除了该示例代码

至少检查您的FP版本,在另一台电脑上检查,在另一台浏览器上检查(即vs FF vs Chrome,可能vs Opera或其他浏览器)。所有这些无处不在?还有,“锯齿”是什么?线条中的阶梯?无抗锯齿?同时检查
stage.quality
是否为
“high”
,可能有自动赋值,通过某些设置降低。谢谢Vesper!通过“jaggies,”我的意思是没有抗锯齿。IDE中的所有内容都正确抗锯齿,但在浏览器中没有。我在Chrome、Firefox和IE9中进行了测试。目前无法访问其他PC,但我的播放器位于11.8.800.129。如果有自动分配的值被重新分配,它只会在浏览器中被重新分配,而不是在IDE中吗?Y是的,它可能在浏览器的FP中被分配了一个不同于调试器FP的值。请同时发布HTML嵌入代码。谢谢。添加了HTML嵌入代码。谢谢!@Vesper:我可以查找哪些可能被重新分配的值?它是否在IDE的脚本窗口中可见?另外:我刚刚检查了站点的crossdomain.xml有些图像来自,我们没有在其中列出。可能是因为crossdomain允许加载图像,但不允许平滑吗?这是我听过的编程语言所做的最愚蠢的事情之一。但是它检查出来,这段代码工作得很好,不会触发任何安全沙盒冲突,而他是另一个。非常感谢你的这个例子。只有一件事:你例子中的图像来自一个服务器,在它的crossdomain.xml文件中有这样的设置:我必须使用的服务器不允许所有的域。当crossdomain文件不包括你的时候,有没有一个解决办法?或者我在这里搞砸了?谢谢。Doh!是的,哟你完全正确,我使用的示例具有尽可能少的限制性跨域。事实证明loadBytes()毕竟不是一个解决方案,这是有道理的。很抱歉给了你希望:-)别担心。没关系。我花了一上午的时间浏览了我们客户的图像URL,结果发现除了一个之外,没有一个客户有一个我们列出的正确的crossdomain.xml文件。其中一个具有“允许所有设置”。即使是那个,当它没有加载时,也让我产生了一种小小的恐慌。然后我注意到它是通过HTTPS传输的,我似乎还记得一些关于Flash不能通过与它本身不同的协议访问的事情
<div id="swf_mr_sc_wt_si"></div>

<script type="text/javascript">
<!--
var swfurl = "http://DOMAIN_WITHELD_SORRY/static/AS3.swf?m=DEFAULT&t=" + (new Date().getTime());
swfobject.embedSWF(swfurl, "swf_mr_sc_wt_si", 300, 250, "8.0.0", "");
// -->
</script>

<p>