2012-06-10 1 views
0

J'ai écrit une application qui permet aux gens de peindre ensemble via Internet (en utilisant Adobe cirrus). Tout fonctionne bien mais quand par exemple je lance mon application et peins quelque chose avant que mon ami ne se connecte, il ne voit pas ce que j'ai peint. Donc je cherche la méthode, qui me permettrait de convertir ma toile en quelque chose (objet) qu'il est possible d'envoyer par internet (je ne peux pas envoyer tout Sprite, il n'est pas possible de copier ses graphismes sur l'application de mon ami, c'est null).AS3/FLEX - comment convertir les graphiques Sprite en octets

Alors, soyons clairs. La question principale est: Comment convertir des graphiques de Sprite en objet, cela me permettrait de le convertir en Sprite et de copier sa toile.

RÉPONSE: J'utilise la bibliothèque DisplayConverter de poste « www.Flextras.com » avec son mod pour convertir Sprite à BitmapData puis à ByteArray et cela fonctionne. Je n'ai pas pu recevoir BitmapData sur l'application de mon ami, mais cela a fonctionné avec 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(); 

Espérons que cela aidera quelqu'un

Répondre

1

Je pense que vous voulez convertir votre toile en un ou BitMap bitmapData (et retour). Un Flex Canvas étend Sprite, de sorte que vous pouvez utiliser une bibliothèque like this one. Pour copier le code correspondant, cela convertir un Sprite à un BitMap:

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 

Cela vous permet de convertir une carte binaire à un Sprite:

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 

Dans mon propre développement, j'ai un mod à ce bibliothèque, ce qui me permet d'obtenir le BitMapData au lieu d'un BitMap réel. Donc, cela tournera un Sprite en bitmapData:

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 

Cela prendra bitmapData et rallumez dans un Sprite:

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 

Vous ne voulez garder à l'esprit que lors de la conversion du BitMap ou bitmapData De retour dans un Sprite, vous ne serez probablement pas capable de le lancer en tant que toile. Pour plus d'informations sur l'envoi de BitMapData à un serveur; regardez this question.

+0

J'ai essayé cette bibliothèque auparavant, mais elle ne semblait pas fonctionner dans ma situation. Je vais essayer à nouveau avec votre mod. BTW im n'utiliser aucun serveur, juste Cirrus, p2p. Alors peut-être que c'est le problème, que quand j'envoie Bitmap à mon ami, il essaie de convertir ce Bitmap avant qu'il ne soit entièrement reçu/téléchargé de moi? – swoorn

+0

Je n'ai pas d'expérience personnelle w/Cirrus. Cependant, si vous essayez de traiter un BitMap avant d'avoir toutes les données; il est facile de voir comment cela pourrait causer un problème. – JeffryHouser

0

Une meilleure approche consiste, au lieu d'aller directement aux pixels, à ce que les mouvements de l'utilisateur créent des données, puis reflètent ces données sous forme de dessin sur votre canevas. Transmettez les mêmes données à l'autre utilisateur et il obtiendra le même dessin.

Questions connexes