使用带有混合模式的BitmapData.draw()时出错

时间:2014-01-11 12:28:45

标签: actionscript-3 flash air bitmapdata

我想使用不同的转换和混合模式用透明精灵填充bitmapdata。绘图后,它会在图像边框上产生亮线。

以下是不使用混合模式的结果截图 http://www.flasher.ru/forum/attachment.php?attachmentid=30347&stc=1&d=1389390901 使用混合模式时的结果 http://www.flasher.ru/forum/attachment.php?attachmentid=30348&stc=1&d=1389390901

这里是代码示例,作为singleSp,您可以使用任何透明图像

    package 
    {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.display.StageScaleMode;
import flash.display.StageAlign;

public class Main extends Sprite 
{

    [Embed(source = "assets/pic1.png")]
    public var singleSp:Class;

    var picBD:BitmapData;
    var picBM:Bitmap;


    public function Main():void 
    {
        picBD = new BitmapData(600, 600, true, 0);
        picBM = new Bitmap(picBD, "auto", true);
        addChild(picBM);

        var tr:Matrix = new Matrix();

        var drawIm:BitmapData = (new singleSp as Bitmap).bitmapData;

        for (var i:int = 0; i < 30; i++ ) {

            var scale:Number = 0.3 + Math.random() * 0.8;               
            tr.setTo(1, 0, 0, 1, 0, 0);
            tr.scale(scale, scale);
            tr.rotate(Math.random() * 2);
            tr.tx = Math.random() * 150 + 150;
            tr.ty = Math.random() * 150;                

            picBD.draw(drawIm, tr, new ColorTransform(1,1,1,0.4), "invert", null, true);

        }
    }       
}

}

1 个答案:

答案 0 :(得分:0)

我已经进行了测试,我可以看到那些线条(图像的边缘) 我的猜测是,人工制品是由半透明的colorTransform造成的。