我需要帮助让位图在缩放非常小之后正确应用平滑。AS3位图对象在低标度值时不平滑
我现在在做的是使用Loader对象加载.png图像。加载文件后,我将loaderInfo的内容转换为位图并将平滑值设置为true。直到我达到小于0.5的ScaleX和ScaleY值时,它才能正常工作。
例如,如果我有一个1000x1000的对象,将其缩小到200x200会导致位图平滑不再起作用。
我可以重现使用以下所有上浆方法的问题:
- 更改位图上scaleX和scaleY属性。
- 直接更改位图的高度和宽度属性。
- 将位图添加为另一个精灵的子节点,并更改精灵的scaleX和scaleY属性。
- 将位图添加为另一个精灵的子元素,并更改精灵的高度和宽度属性。
- 用矩阵比例创建一个新的BitmapData对象,然后将原始的BitmapData绘制到它上面。
我也试过,我发现搜索时,如一些其他方法:
- 图像的scaleX设置为1.001或0.999
- 迫使位图的高度和宽度对象是偶数。
下面是一些重现问题的示例代码。 (我在本地运行这让我有testimage.png的副本,我斌-debug文件夹)
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);
}
}
我也有创建MainObj类的一个实例,并设置补偿性质的MXML文件在应用程序mxml代码中添加的UIComponant实例(UIComponent允许将位图添加到组成mxml的Spark元素中)。
<?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”切换。 – 2012-02-07 18:53:59
感谢您的提示。:)我确实尝试了这一点,它的工作原理,但它不适合我当前的渲染体系结构。如果情况变得更糟,我会找到一种方法来处理它。 – 2012-02-16 14:08:21