2012-06-10 18 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

更好的方法是,不要直接轉到像素,而是讓用戶手勢創建數據,然後將這些數據反映爲畫布上的圖形。將相同的數據傳輸給其他用戶,他/她將得到相同的圖紙。