如何将多个bitmapData对象合并为一个,以便可以使用PNGEncoder进行编码?

时间:2012-01-30 12:39:49

标签: flash actionscript-3 merge bitmapdata

我正在创建一个实际上是精灵创建者的程序。我是AS3的新手,但我知道JQuery,JS,PHP等。在完成选择片段以自定义角色的多个步骤之后,您应该能够使用fileReference()下载最终产品。一切正常,我最终可以下载图像,但问题是我无法捕捉到舞台上的所有几个动画片段,我只能捕获一个。也许这有助于澄清:

// add listener to the download button
dl_b.addEventListener(MouseEvent.CLICK, save_emote); 

function save_emote(e:MouseEvent):void{ 
    var bData:BitmapData = new BitmapData(50, 50); 
    var bData_eyes:BitmapData = new BitmapData(50, 50); 


    bData.draw(emptyMC_mc);
    bData_eyes.draw(emptyMC_eyes);

    // none of these worked, so they have been commented out
    //bData.draw(emptyMC_a); 
    //bData.draw(emptyMC_mouth); 
    //bData.draw(emptyMC_hand_l); 
    //bData.draw(emptyMC_hand_r); 


    // possible to use two bitmapDatas to merge into single?
    var byteArray:ByteArray = PNGEncoder.encode(bData);

    var fileReference:FileReference = new FileReference();
    fileReference.save(byteArray, 'myEmote.png');
    replay_b.visible = true; 
    upload_b.visible = true; 
    back_b.visible = false; 
    user_color.clear(); 
    user_eyes.clear(); 
    user_mouth.clear(); 
    user_a.clear(); 
    hand_l.clear(); 
    hand_r.clear(); 
    mouth_coords.clear(); 
    eye_coords.clear(); 
}

我真的不知道如何才能让它发挥作用。我已经尝试过使用.merge()方法,我已经尝试了几天Googling,并且我尝试通过创建两个单独的bitmapData对象然后在另一个中绘制一个来合并它们。没有什么对我有用。

如果您想查看该计划并点击该计划进入保存图片的位置,可以在此处试用:http://dl.dropbox.com/u/3666815/mote-machine-main.html

如果您在最后保存图片,则会看到手头的问题。我一直无法找到一个好的答案,所以如果有人能提供帮助,我们将非常感激!

提前致谢!

编辑:这是我如何使用Sprite作为容器进行设置,但现在它似乎正在保存一个空白画布。

    var emote:Sprite = new Sprite(); 
    emote.addChild(emptyMC_mc); 
    emote.addChild(emptyMC_eyes); 
    emote.addChild(emptyMC_hand_l); 
    emote.addChild(emptyMC_hand_r); 
    emote.addChild(emptyMC_mouth); 
    if(user_a.data.accessory != "none"){
            emote.addChild(emptyMC_a); 
    } 

    var bData:BitmapData = new BitmapData(80, 80); 

    bData.draw(emote);

可能是我添加到精灵中的每个动画片段都有自己的孩子吗?

1 个答案:

答案 0 :(得分:2)

如果将位图放入某种显示对象容器(如Sprite)中,稍后可以使用“draw”和/或“copyPixels”方法来获取容器的位图数据,这将保留所有孩子们在适当的地方。这应该做你需要的。