0

我编写的应用程序可以让人们通过互联网一起绘画(使用 Adob​​e cirrus)。一切都很好,但是当我运行我的应用程序并在我的朋友连接之前画一些东西时,他看不到我画的东西。所以我正在寻找一种方法,它可以让我将我的画布转换为可以通过互联网发送的东西(对象)(我不能发送整个 Sprite,不可能在朋友的应用程序上复制它的图形,它是空的)。

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

解答: 我使用“www.Flextras.com”帖子中的 DisplayConverter 库和他的 mod 将 Sprite 转换为 BitmapData,然后转换为 ByteArray,它可以工作。我无法在朋友的应用程序上接收 BitmapData,但它可以与 ByteArray 一起使用。

精灵 -> 位图数据 -> 字节数组;
字节数组 -> 位图数据 -> 精灵;

//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();

希望这会对某人有所帮助

4

2 回答 2

1

我认为您想将 Canvas 转换为 BitMap 或 BitMapData(并返回)。Flex Canvas扩展了Sprite,因此您可以使用这样的。要复制相关代码,这会将 Sprite 转换为 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

这会将位图转换为 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

在我自己的开发中,我对这个库有一个 mod,它允许我获取 BitMapData 而不是实际的 BitMap。因此,这会将 Sprite 转换为 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

这将获取 BitMapData 并将其转回 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

您确实要记住,在将 BitMap 或 BitMapData 转换回 Sprite 时,您可能无法将其转换为 Canvas。有关将 BitMapData 发送到服务器的信息;看看这个问题

于 2012-06-10T22:22:43.467 回答
0

更好的方法是,而不是直接使用像素,让用户手势创建数据,然后将该数据反映为画布上的绘图。将相同的数据传输给其他用户,他/她将获得相同的绘图。

于 2012-06-10T23:43:47.580 回答