Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   BitmapData -> FREBitmapData (http://www.flasher.ru/forum/showthread.php?t=212624)

Nnget 28.03.2016 23:03

BitmapData -> FREBitmapData
 
И снова я с вопросом про ane, действие происходит с android.

Задача передать в java картинку для дальнейшей обработки. По описанию найденному в интернете все должно быть просто

шаг 1. отправляю BitmapData (AS3)

_context.call("MarkerSetIcon",id,new BitmapData(50,50,false,0xffffff));

шаг 2. ловлю как объект FREBitmapData

FREBitmapData bitmapData=(FREBitmapData) args[1];
bitmapData.acquire();
Bitmap bitmap=Bitmap.createBitmap(
bitmapData.getWidth(),
bitmapData.getHeight(),
Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(bitmapData.getBits());
bitmapData.release();

Проблема в строчке: FREBitmapData bitmapData=(FREBitmapData) args[1];
CATLOG выдает безымянную ошибку (printnl needs a message).

Понимаю что, что-то не понимаю, но что???

undefined 28.03.2016 23:19

думаю, вместо args[1] должен стоять некий параметр, передаваемый в обработчик.Где вообще это происходит?

Nnget 28.03.2016 23:31

Это происходит в классе FREFunction

передал id(args[0]) и BitmapData(args[1]).

Код AS3:

public class MarkerSetIcon implements FREFunction {
 
        @Override
        public FREObject call(FREContext context, FREObject[] args) {
                try {
                        int id=args[0].getAsInt();
                        MarkerGoogleMaps marker;
 
                        FREBitmapData bitmapData=(FREBitmapData) args[1];
                        bitmapData.acquire();
                        Bitmap bitmap=Bitmap.createBitmap(
                                bitmapData.getWidth(),
                                bitmapData.getHeight(),
                                Config.ARGB_8888);
                        bitmap.copyPixelsFromBuffer(bitmapData.getBits());
                        bitmapData.release();
                        marker.setImage(bitmap);
                } catch (Exception e) {
                        Log.e("GM", e.getMessage());
                }
                return null;
        }
 
}


illuzor 29.03.2016 00:42

В args флешовая битмапдата точно в виде FREBitmapData? Там не массив байтов случаем? (byte[])?

ShockWave512 29.03.2016 01:27

Читал что аргументом можно передавать только простые типы, int, Number, String.

Nnget 29.03.2016 15:41

И так. В итога все были не правы.
Вынужден был отдельно создать ane для проверки и искать информацию.
В итоге BitmapData (AS3) можно в качестве аргумента передавать и получать как (FREBitmapData). И Более того ее можно возвращать как результат.

В моем примере:
1)загружаем в AS3 из сети BitmapData загоняем в функцию ane.
2)в java преобразуем из FREBitmapData в Bitmap,
3)создаем новый FREBitmapData, ложим данные из Bitmap
4)их возвращаем.
5)получаем в AS3 BitmapData
6)преобразуем в Bitmap и выводим на экран

Класс java:
Код AS3:

        @Override
        public FREObject call(FREContext context, FREObject[] args) {
                FREBitmapData res=null;
                try {
                        FREBitmapData inputValue = (FREBitmapData)args[0];
                        inputValue.acquire();
                        int width = inputValue.getWidth();
                        int height = inputValue.getHeight();
                        Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
                        bmp.copyPixelsFromBuffer(inputValue.getBits());
                        inputValue.release();
 
                        int size    = bmp.getRowBytes() * bmp.getHeight();
                        res=FREBitmapData.newBitmapData(bmp.getWidth(), bmp.getHeight(), true,new Byte[]{(byte)0xff, (byte)0xff, (byte)0xff, (byte)0xff});
                        res.acquire();
                        bmp.copyPixelsToBuffer(res.getBits());
 
                        res.release();
                } catch (Exception e) {
                        Log.i("testBitmapData", "error: "+e.getMessage());
                }
 
                return res;
        }

класс SWC
Код AS3:

        public class TestBitmapData
        {
                private static var context:ExtensionContext;
 
                public function TestBitmapData()
                {
                }
 
                public static function init():void
                {
                        if(!context) context=ExtensionContext.createExtensionContext("com.nngames.testbitmapdata",null);
                }
 
                public static function setBitmapData(value:BitmapData):BitmapData
                {
                        if (context)
                        {
                                return BitmapData(context.call('goBitmapData',value));
                        }
                        return null;
                }
        }

Тестовое приложение:
Код AS3:

                public function testBitmapDataAne()
                {
                        super();
 
                        // support autoOrients
                        stage.align = StageAlign.TOP_LEFT;
                        stage.scaleMode = StageScaleMode.NO_SCALE;
 
                        var url:URLRequest=new URLRequest('https://www.google.ru/images/nav_logo242.png');
 
                        TestBitmapData.init();
 
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
                        loader.load(url);
                }
 
                protected function onComplete(event:Event):void
                {
                        var b:Bitmap=Bitmap(loader.content);
                        var bd:BitmapData=TestBitmapData.setBitmapData(b.bitmapData);
                        var b1:Bitmap=new Bitmap(bd);
                        addChild(b1);
                }



Часовой пояс GMT +4, время: 20:38.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.