2013-02-27 47 views
0

我正在将DropShadowFilter应用于Adobe AIR 3.5,ActionScript 3 Mobile项目中的位图。大多数情况下,它工作正常。然而,无论何时,无论是在底部还是右侧,图像都会被略微切掉。DropShadowFilter在ActionScript 3中裁剪位图

看到这些图片:

enter image description here VS enter image description here

正如你可以看到,右侧和底部都采用了阴影时,裁剪。是否有一个原因?或者一种方法来解决它?

EDIT(10:30 AM MST 2-27):作为一个快速更新,它也会发生与BlurFilter和,据推测,任何其他过滤器。

回答

1

Bitmap位于非整数x或y位置时,会发生这种情况。这似乎是源数据如何传递给过滤器的一个错误,我无法找到一个很好的解决方案,尝试使用不同的BitmappixelSnappingsmoothing属性。

你可以继续按四舍五入其全球位置正好对准图像(见localToGlobalglobalToLocal,但如果它的动作可能更容易包裹Bitmap与一个稍大的透明背景Sprite,强制过滤器包括周围边缘的安全余量事情是这样的:

private var b:Bitmap = new EmbeddedClass(); 
private var container:Sprite = new Sprite(); 
container.addChild(b); 
container.graphics.beginFill(0xFF00FF, 0); 
container.graphics.drawRect(-2, -2, container.width + 4, container.height + 4); 
container.graphics.endFill(); 
container.filters = [new DropShadowFilter()]; 

或者,你可以借鉴源BitmapData到稍大副本做同样的事情

+0

太棒了。正是我希望看到的。那么...不完全。这很糟糕,我不得不去解决该死的SDK,但至少它是可以修复的。只有不好的部分是我在这个项目中有数百个图像。我想,我必须制作一个自动执行此操作的自定义Bitmap类。 Damnit,Flash。感谢你的回答。 – 2013-02-28 00:09:23

1

我不确定您是如何生成位图的,但是如果您使用的是BitmapData类,请使用便利的generateFilterRect()函数,该函数将使用应用的传递过滤器计算新边界。

这应该给你正确的尺寸,尤其是当使用BlurFilter或BevelFilter来扩展对象的外观时。看看下面的方法描述的例子。

+0

它实际上是一个嵌入式图像I嵌入和公正。做一个'var b:Bitmap = new Emb eddeClass();' – 2013-02-27 21:25:42