AS3,AIR,Socket:如何正确读取readObject()?

时间:2013-11-26 12:50:59

标签: actionscript-3 sockets bitmap air

我正在尝试使用套接字类中的 writeObject()方法将位图从AIR应用程序(服务器)传递到另一个(客户端)。 / p>

clientSocket.writeObject(myBitmap);// (var myBitmap:Bitmap)
clientSocket.flush();

当我尝试在客户端应用上获取位图时出现我的问题。使用方法 readObject(),我将获得一个通用对象,其中包含位图的所有属性。我无法以任何方式将此对象转换为位图。

var receivedObject:* = socket.readObject();
trace(receivedObject);// [Object Object]
trace(receivedObject as Bitmap); // null

请帮忙吗?

Adob​​e没有很好地记录这种过程。

非常感谢。

1 个答案:

答案 0 :(得分:2)

Bitmap类是DisplayObject,通过ByteArray功能克隆(使用writeObject/readObject方法)不适用于DisplayObjects(请查看此问题例如how to work registerClassAlias() method for custom mxml components)。

对于这种特殊情况,您可以编写/读取BitmapData对象和Rectangle属性,并使用它恢复Bitmap

    var bd:BitmapData = myBitmap.bitmapData;
    var data:Object = {rect:bd.rect, bytes:bd.getPixels(bd.rect)}
    clientSocket.writeObject(data);

    var data:Object = socket.readObject();
    var bd2:BitmapData = new BitmapData(data.rect.width, data.rect.height);
    bd2.setPixels(bd2.rect, data.bytes);
    addChild(new Bitmap(bd2));