Конвертируйте Byte Array из Action Script в Image на Java и сохраните его - PullRequest
0 голосов
/ 25 июня 2010

Я разработчик .NET, но у меня возник вопрос, не связанный с .NET
Пожалуйста, имейте это в виду, даже если мой вопрос звучит очень банально.

Это мой вопрос:

У нас есть браузер в SWF, который общается с расширением Java
Это сделано с использованием Smartfox Server (используется для приложений MMO)

Из swf мы берем часть экрана как «Byte Array» в сценарии действия (3). А в Java мы вызываем функцию, которая преобразует ByteArray в Image и затем сохраняет его.

Наш Java-разработчик обнаружил ошибку

java.lang.IllegalArgumentException

при выполнении функции Java.

Итак, в основном я хотел бы знать следующее:

Как принять байтовый массив типа объекта из ActionScript в Java?
Какой тип объекта Java сопоставлен с байтовым массивом в ActionScript?
Осмелюсь сказать, что преобразование легко.

Обновление:

Код в разделе 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);
}

Первая функция вызывает расширение SmartFox в Java. Название расширения "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: it.goto andplay.smartfoxserver.lib.ActionscriptObject

С уважением,
naveenj

Ответы [ 3 ]

2 голосов
/ 25 июня 2010

flash.utils.ByteArray сопоставлен с типом Java byte[].

0 голосов
/ 25 июня 2010

Массив байтов не получен напрямую.Он входит внутрь объекта AS.Реальный вопрос здесь заключается в том, как получить этот байтовый массив внутри объекта ActionScript в объект байтового массива Java.

Я - вышеупомянутый Java-разработчик и делаю это.

0 голосов
/ 25 июня 2010

Я не уверен, что это проблема, но в соответствии с моделью безопасности Flash, если SWF загружает носитель с любого хоста / домена, отличного от того, на который он был загружен, захват экрана может привести к ошибке.Можете ли вы проверить полученный массив байтов?Какой у него размер?И попробуйте распечатать его начальные несколько значений.

...