138. [game, ANE] XProject1. Нативное расширение для работы с галлереей и камерой

Game – Серия статей посвященных разработке flash-игр на языке ActionScript. Игры для соц.сетей и мобильных платформ iOS, Android.
http://flashpress.ru/blog/category/game/
Adobe Native Extensions – Нативные расширения для платформ iOS
http://flashpress.ru/blog/category/ane/

Суть проблемы

В приложении необходимо было загрузить фотографию из альбома и сохранить в каталоге приложения, для дальнейшей работы с этой фотографией. Во флеше есть класс CameraRoll который умеет загружать фотографии из вашей фотопленки, и есть еще класс CameraUI, с помощью которого можно сделать фотографию с помощью камеры. Эти классы показывают нативные окна операционной системы и прекрасно справляются со своей задачей. Но в моем приложении необходимо было загрузить фотографию и сохранить ее в каталоге приложения, что бы после выхода из приложения можно было продолжить работу с фотографией. Первым делом я загрузил фотографию с помощью класса CameraRoll, попытался конвертировать в ByteArray с помощью PNG-энкодера и сохранил байтовый массив с помощью класса File. В итоге получил проблему с производительностью, процесс сохранения на моем устройстве происходил очень долго. В итоге решил написать ANE-библиотеку для iOS.

ANE-библиотека для копирования файлов

Для использования библиотеки FPPhotoSelect необходимо её сперва проинициализировать:

В методе init необходимо передать путь, относительно домашней директории, до каталога где будут хранится фотографии. Далее вызываем метод imagePick для отображения нативного окна выбора фотографии:

Параметр sourceType влияет на вид отображаемого окна, можно выбрать один из трех вариантов, описанных в классе FPSourceType:

  • UIImagePickerControllerSourceTypeCamera:int=1 – Камера
  • UIImagePickerControllerSourceTypeSavedPhotosAlbum:int=2 – Фотографии сохраненные в альбоме
  • UIImagePickerControllerSourceTypePhotoLibrary:int=3 – Фотогалерея, можно выбрать любыую фотографию, включая альбомы и Фотопоток

После того как фотография была загружена в ваш каталог, вы сможете загрузить этот файл используя следующий путь:

Свойство FPPhotoSelect.homeDirectory вернет вам домашнюю директорию приложения. В этой домашней директории лежат каталоге Documents, Library и tmp, вы можете сохранять свои фотографии в любом из них.

Скачать библиотеку FPPhotoSelect.ane можно здесь, исходники вместе с проектом Xcode здесь. Документация:

Да прeбудет с вами Flash.
Serious Sam
Эту статью прочитали 1593 раз

Возникли вопросы по статье? Не стесняйтесь спрашивать в комментариях или любым другим способом на странице Контакты .

Присоединяйтесь к нам в социальных сетях: ВКонтакте , Twitter и Facebook
Понравилась статья? Буду благодарен если вы поделитесь ссылкой с друзьями:


Комментарии ВКонтакте:




Комментарии Facebook:




Комментарии WordPress:


  1. Артем

    …попытался конвертировать в ByteArray с помощью PNG-энкодера и сохранил байтовый массив с помощью класса File. В итоге получил проблему с производительностью, процесс сохранения на моем устройстве происходил очень долго.

    Проблема не в процессе сохранения (он занимает максимум 50 мс), а в процессе конвертирования в ByteArray с помощью PNG-энкодера (может достигать более 10 секунд). Сам с этим сталкивался, проблемы была решена написаниям ANE для энкодинга. Прирост производительности более чем в 7,5 раз :)

    1. Serious Sam Автор записи

      Да, проблема именно в конвертировании, когда я писал про сохранение, я имел ввиду весь процесс целиком :) Еще я заметил что конвертация в PNG происходит в разы быстрее чем в JPEG, меня это сильно удивило, может быть JPEG-конвертор не сильно оптимизированный был… А в Objective-C, кстати конвертация в JPEG происходит раза в два быстрее чем в PNG, причем от степени сжатия JEPG скорость сильно не зависела.

      1. Артем

        Странно что конвертация в JPEG в 2 раза дольше. Поидее это тоже самое что и в PNG только без контроля альфы.
        Недавно возникла потребность конвертации в PNG на JAVA, раньше видел решение, а сейчас не могу найти. Может у Вас есть ссылка на аналогичное решение на JAVA?