【发布时间】:2012-02-07 17:44:38
【问题描述】:
我需要帮助获取位图以在缩放非常小后正确应用平滑。
我现在正在做的是使用 Loader 对象加载 .png 图像。加载文件后,我将 loaderInfo 的内容转换为位图并将平滑值设置为 true。在我达到小于 0.5 的 ScaleX 和 ScaleY 值之前,这可以正常工作。
例如,如果我有一个 1000x1000 的对象,将其缩小到 200x200 会导致位图平滑不再起作用。
我可以使用以下所有大小调整方法重现该问题:
- 更改位图上的 scaleX 和 scaleY 属性。
- 直接更改位图的高度和宽度属性。
- 将位图添加为另一个精灵的子元素,并更改精灵的 scaleX 和 scaleY 属性。
- 将位图添加为另一个精灵的子元素,并更改精灵的高度和宽度属性。
- 创建一个具有矩阵比例的新 BitmapData 对象,然后在其上绘制原始 BitmapData。
我还尝试了一些在搜索时发现的其他解决方法,例如:
- 将图像的 scaleX 设置为 1.001 或 0.999
- 强制位图对象的高度和宽度为偶数。
下面是一些重现问题的示例代码。 (我在本地运行,所以我的 bin-debug 文件夹中有 testimage.png 的副本)
public class MainObj
{
public var comp:UIComponent;
public function MainObj()
{
}
public function LoadContent():void
{
var str:String = "testimage.png";
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadContentComplete);
l.load(new URLRequest(str));
}
public function LoadContentComplete(e:Event):void
{
var li:LoaderInfo = e.target as LoaderInfo;
var bmp:Bitmap = li.content as Bitmap;
bmp.smoothing = true;
bmp.scaleX = 0.2;
bmp.scaleY = 0.2;
comp.addChild(bmp);
}
}
我还有一个 mxml 文件,它创建 MainObj 类的实例并将 comp 属性设置为已添加到 Application mxml 代码中的 UIComponant 实例(UIComponent 允许将位图添加到 Spark 元素中向上 mxml)。
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955" minHeight="600"
width="800" height="600">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
private var mainObj:MainObj;
override protected function initializationComplete():void
{
mainObj = new MainObj();
mainObj.comp = comp;
mainObj.LoadContent();
super.initializationComplete();
}
]]>
</fx:Script>
<s:VGroup width="100%" height="100%">
<mx:UIComponent id="comp" width="100%" height="100%"/>
</s:VGroup>
</s:Application>
【问题讨论】:
-
您始终可以通过
BitmapData.draw()创建BitmapData的较小副本并缩放副本来解决此问题。这需要一些逻辑来创建副本和bitmap.bitmapData切换。 -
感谢您的提示。 :)我确实尝试过这个并且它有效,但它不能很好地适应我当前的渲染架构。如果情况变得更糟,我会想办法解决。
标签: actionscript-3 flash apache-flex bitmap flex-spark