AS3使用Antialias将形状渲染为位图

时间:2011-05-17 08:10:12

标签: actionscript-3

我在AS3中画了一个圆形。我想将圆形渲染成具有漂亮/抗锯齿边缘的位图。因为我希望它能够在移动设备上运行(Air Apps仅限于stagequality = low),我需要一个解决方法。可以使用任何自定义形状的位图渲染器吗?

5 个答案:

答案 0 :(得分:2)

不确定此解决方案是否适用于Air Mobile Apps,但值得研究。

Didier Brun @ ByteArray.org发布了一个用于绘制原始形状的API(如BitmapData,而不是来自Vector绘制调用),这可能有助于让您的圆圈以您想要的方式绘制。

http://www.bytearray.org/?p=67

代码段(来自该网址):

// create the BitmapData to work on
var pixels:Raster = new Raster(320, 240, true);

// draw stuff
pixels.drawRoundRect( new Rectangle ( 20, 20, 200, 100), 18, 0xFF00FFFF );
pixels.drawRect( new Rectangle ( 70, 70, 100, 100 ), 0xFF009900 );
pixels.filledTri( 40, 40, 80, 110, 50, 30, 0xFF998811 );
pixels.aaCircle(100, 100, 40, 0x77AA88 );
pixels.circle(40, 40, 30, 0xFF000000);
pixels.line(10, 10, 60, 80, 0xFF000000 );

// show it
addChild ( new Bitmap ( pixels ) );

希望库/源代码与您的项目兼容! :)

答案 1 :(得分:2)

您是否考虑使用drawWithQuality方法?

drawWithQuality()方法的工作方式与draw()方法完全相同,但不是使用Stage.quality属性来确定矢量渲染的质量,而是将质量参数指定为{{1方法。

答案 2 :(得分:1)

如果您使用StageQuality.LOW

draw()会使您的位图质量降低,因为无论是否在DisplayList上,源都是低质量的。

我认为没有办法解决这个问题。你必须加载圆形图形或导入图像才能使用。

答案 3 :(得分:1)

如果它只是简单的圆形,你可以逐个像素地合成平滑的图像。创建足够大小的BitmapData并在像素上循环。在每个像素上,计算距中心的距离 - 如果小于圆半径 - 像素对角线的一半,则将像素设置为圆形颜色。如果它大于圆半径+像素对角线的一半,则调用setPixel32(x,y,0) 不能通过两个条件的像素都在边缘附近 - 要进行精确的抗锯齿处理,您必须计算圆圈覆盖的像素数量。也许你可以找到一些令人信服的简单近似。祝你好运!

<强>更新 好吧,我想我可以记住更简单的方法...你可以绘制你的圆形或任何比它们应该大两倍的形状,然后将该位图绘制成另一个,其比例为0.5(通过矩阵设置)并平滑。这将是超级采样4倍。如果舞台质量不影响位图平滑,它应该可以工作。

答案 4 :(得分:0)

在ActionScript 3中,位图是从 BitmapData 创建的,因此您需要先创建

_bitmapData = new BitmapData(..

BitmapData 方法绘制,传递 DisplayObject 实例(精灵 MovieClip 或其他)作为参数,将其内容绘制到 BitmapData 。 例如:

var c:Sprite = new Sprite();
c.graphics.clear();
c.graphics.beginFill(0x00FF00, 0.5);
c.graphics.lineStyle(2.0);
c.graphics.drawRectangle(0, 0, 100, 100);
c.graphics.endFill();
var bd:BitmapData = new BitmapData(100, 100);
bd.draw(c);
var bitmap:Bitmap = new Bitmap(bd);