【问题标题】:AS3,AIR,Socket: How to readObject() correctly?AS3,AIR,Socket:如何正确读取Object()?
【发布时间】:2013-11-26 12:50:58
【问题描述】:

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

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

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

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

请帮忙?

Adobe 没有详细记录此类过程。

非常感谢。

【问题讨论】:

    标签: actionscript-3 sockets bitmap air


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多