代码之家  ›  专栏  ›  技术社区  ›  codeandcloud

将字节数组从动作脚本转换为Java中的图像并保存

  •  0
  • codeandcloud  · 技术社区  · 15 年前

    我是.NET开发人员,但我遇到的问题与.NET无关
    请记住这一点,即使我的问题听起来很琐碎。

    这是我的问题:

    我们在浏览器中有一个SWF,它与Java扩展进行通信。
    使用smartfox服务器完成(用于MMO应用程序)

    从SWF中,我们在操作脚本(3)中将屏幕的一部分作为“字节数组”。 在Java中,我们调用一个函数,它将BytErar转换成图像,然后保存它。

    我们的Java开发人员遇到了错误

    java.lang.illegalargument异常

    当Java函数执行时。

    所以基本上,我想知道的是:

    如何从Java中的ActionScript接受对象类型字节数组?
    在ActionScript中映射到字节数组的Java对象类型是什么?
    我敢说,转换部分很容易。

    更新:

    ActionScript部分中的代码

    public function savePhoto(uName:String, ba:ByteArray, descr:String):void{
        var obj:Object = {};
        obj.arr = ba;
        obj.desc = descr;
        sfsConnectobj.photoSectionSave(obj,"save");
    }
    
    public function photoSectionSave(targetObject:Object,type:String) {
        sfs.sendXtMessage("trialjava", "save", targetObject);
    }
    

    第一个函数调用Java中的StaskFox扩展。 扩展名为“trialjava.js”

    接受函数的Java代码是

    public void handleRequest(String cmd, ActionscriptObject ao, User u, int fromRoom)
    {
        try {
            ActionscriptObject arr = ao.getObj("arr");
            String dirName="C:\\";
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                ObjectOutputStream oos;
                oos = new ObjectOutputStream(bos);
                oos.writeObject(ao.getObj("arr"));
                oos.flush();
                oos.close();
                bos.close();
                byte [] data = bos.toByteArray();
                BufferedImage imag=ImageIO.read(new ByteArrayInputStream(data));
                ImageIO.write(imag, "jpg", new File(dirName,"snap.jpg"));
    
        } 
        catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("Array reading not succesful. Error is: "+e);
        }
    }
    

    似乎在用Java检索对象时有一个小的错配。

    现在错误不同了。

    数组读取失败。错误是: java.io.NotSerializableException(Java.IO.NotSerializableException): 转到 andplay.smartfoxserver.lib.actionscriptObject

    当做,
    纳维恩

    3 回复  |  直到 15 年前
        1
  •  2
  •   Gunslinger47    15 年前

    flash.utils.ByteArray 映射到Java byte[] 类型。

        2
  •  0
  •   Ashish Patil    15 年前

    我不确定这是否是一个问题,但根据Flash安全模型,如果SWF从加载它的主机/域以外的任何主机/域加载媒体,屏幕捕获将导致错误。 你能检查一下你收到的字节数组吗?它的尺寸是多少?尝试打印它的起始值。

        3
  •  -1
  •   John    15 年前

    未直接接收字节数组。它进入一个as对象。这里真正的问题是如何将ActionScript对象中的这个字节数组获取到Java字节数组对象。

    我是上述Java开发人员,我正在做这件事。