2012-06-10 15 views
0

我编写的应用程序可以让人们通过互联网(使用Adobe卷云)绘制在一起。一切都很好,但是当我运行我的应用程序并在朋友连接之前画一些东西时,他没有看到我绘制的东西。所以我正在寻找方法,它可以让我将画布转换为可以通过互联网发送的东西(对象)(我无法发送整个Sprite,也不可能将其图形复制到朋友的应用程序中,它是空的)。AS3/FLEX - 如何将Sprite图形转换为字节

所以让我们弄清楚。主要问题是:如何将Sprite的图形转换为对象,这会让我将它转换回Sprite并复制它的画布。

答: 我用DisplayConverter库从“www.Flextras.com”后,他向国防部转换雪碧对BitmapData,然后ByteArray的和它的作品。我无法在朋友的应用程序上收到BitmapData,但它与ByteArray一起工作。

Sprite - > BitmapData - > ByteArray;
ByteArray - > BitmapData - > Sprite;

//TO SEND 
var bitmapdata:BitmapData = DisplayConverter.spriteToBitmapData(palette); 
var bytearr:ByteArray = bitmapdata.getPixels(bitmapdata.rect); 

//TO RECEIVE 
var bmd:BitmapData = new BitmapData(530,430); 
bmd.setPixels(bmd.rect, bytearr);  

mysprite.graphics.beginBitmapFill(bmd); 
mysprite.graphics.drawRect(0,0,530,430); 
mysprite.graphics.endFill(); 

希望这会帮助别人

回答

1

我想你想你的画布转换成位图或BitmapData(反面)。 A Flex Canvas扩展了Sprite,因此您可以使用库like this one。要复制相关的代码,这将雪碧转换为位图:

public static function spriteToBitmap(sprite:Sprite, smoothing:Boolean = false):Bitmap 
    { 
     var bitmapData:BitmapData = new BitmapData(sprite.width, sprite.height, true, 0x00FFFFFF); 
     bitmapData.draw(sprite); 

     return new Bitmap(bitmapData, "auto", smoothing); 

    } // END FUNCTION spriteToBitmap 

这将位图转换为雪碧:

public static function bitmapToSprite(bitmap:Bitmap, smoothing:Boolean = false):Sprite 
    { 
     var sprite:Sprite = new Sprite(); 
     sprite.addChild(new Bitmap(bitmap.bitmapData.clone(), "auto", smoothing)); 
     return sprite; 

    } // END FUNCTION bitmapToSprite 

在我自己的发展,我有一个模本库,它允许我获取BitMapData而不是实际的BitMap。所以,这会变成一个雪碧成位图数据:转换位图或位图数据时

public static function bitmapDataToSprite(bitmapData:BitmapData, smoothing:Boolean = false):Sprite 
    { 
     var sprite:Sprite = new Sprite(); 
     sprite.addChild(new Bitmap(bitmapData.clone(), "auto", smoothing)); 
     return sprite; 

    } // END FUNCTION bitmapToSprite 

你要记住:

public static function spriteToBitmapData(sprite:Sprite):BitmapData 
    { 
     var bitmapData:BitmapData = new BitmapData(sprite.width, sprite.height, true, 0x00FFFFFF); 
     bitmapData.draw(sprite); 

     return bitmapData; 

    } // END FUNCTION spriteToBitmapData 

这将需要的位图数据,并把它放回雪碧回到Sprite中,你可能无法将其作为Canvas进行投射。有关将BitMapData发送到服务器的信息;看看this question

+0

我以前试过这个库,但它似乎不适用于我的情况。我会再次尝试与你的mod。 BTW即时消息不使用任何服务器,只是Cirrus,P2P。所以也许这就是问题所在,当我将Bitmap发送给我的朋友时,他会在从我完全接收/下载之前尝试转换该Bitmap? – swoorn

+0

我没有与Cirrus亲身经历。但是,如果您在获取所有数据之前尝试处理BitMap,很容易看出这可能会导致问题。 – JeffryHouser

0

更好的方法是,不要直接转到像素,而是让用户手势创建数据,然后将这些数据反映为画布上的图形。将相同的数据传输给其他用户,他/她将得到相同的图纸。