Блог от AS3Coder'a о JavaScript, HTML, CSS... и немного о Flash.

пятница, 26 марта 2010 г.

Загрузка и отображение .bmp-изображений на ActionScript 3.0

Все мы знаем, что для того, чтобы загрузить изображение во as3-приложение, обычно используется экземпляр класса flash.display.Loader. Но типы загружаемых изображений ограничены. Возможно загрузка только .png, .jpg, .gif, .swf-файлов. А как быть например с .bmp-изображениями? Об этом мы и поговорим.

URLLoader.load();

Загружать изображение будем как бинарные данные, с помощью экземпляра класса flash.net.URLLoader. Указываем экземпляру формат загружаемых данных URLLoaderDataFormat.BINARY, и вызываем метод load, где в качестве параметра передаем экземпляр класса flash.net.URLRequest с адресом к файлу.

var loa:URLLoader = new URLLoader();
loa.dataFormat = URLLoaderDataFormat.BINARY;
loa.load(new URLRequest("image.bmp"));

ImageDecoder

Так как все изображения сжаты определенными алгоритмами, для того, чтобы их отобразить, необходимо их раскодировать. В прошлом посте мы рассматривали Encoder'ы изображений, и говорили о том, что писать их самому нет необходимости, потому что в сети полно готовых. Такая же ситуация и с Decoder'ами. Ищем. Находим:
Использовать их довольно легко. Вызывается метод decode, в единственном параметре передается ссылка на загруженные бинарные данные в виде экземпляра класса flash.utils.ByteArray (Те данные, что мы загрузили с помощью URLLoader). После исполнения возвращается экземпляр flash.display.BitmapData, который мы уже можем отобразить используя flash.display.Bitmap.

var brr:ByteArray = loa.data;
var dec:BMPDecoder = new BMPDecoder ();
var raw:BitmapData = dec.decode(brr); 
var bmp:Bitmap = new Bitmap(raw);
addChild(bmp);
В сети можно также найти Decoder'ы для других типов файлов. Например для .tiff (Tagged Image File Format), и даже .psd-файлов (Photoshop Document). Так что теперь дело за вами :)
        

Доступен справочник по языку Adobe Flex 4 ActionScript 3.0 на русском языке

Не прошло и недели, как Adobe уже перевела на русский язык официальную справку ActionScript 3.0 под Flex 4. Всегда бы так :)
    

четверг, 25 марта 2010 г.

Сохранение изображения на ActionScript 3.0

Частенько бывает необходимость сохранить отображаемый во Adobe Flash Player'е контент в изображение. Как это сделать, мы рассмотрим по пунктам:

BitmapData.draw();

Для того, чтобы снять снимок с любого отображаемого объекта (основная их часть находится в пакете flash.display) в ActionScript, нужно воспользоваться методом draw у экземпляра класса flash.display.BitmapData.

Для этого необходимо создать экземпляр класса BitmapData. В конструкторе указываем размеры нашего снимка. Далее вызываем метод draw, где в качестве параметра передадим ссылку на необходимый нам display-объект (в данном случае, это экземпляр сцены).

var raw:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight);
raw.draw(stage);
После выполнения метода наш экземпляр заполнится сырыми данными с информацией о каждом пикселе.



ImageEncoder

Теперь для того, чтобы наш экземпляр класса BitmapData с сырыми данными стал полноценным изображением, нужно сконвертировать его данные соответсвующим образом и собрать их в файл.

В качестве файла мы используем экземпляр класса flash.utils.ByteArray. В него мы будем записывать сконвертированные данные в виде байтов.

Изображения бывают разных типов. Наиболее популярные из них .png (Portable Network Graphics), .jpg (Joint Photographic Experts Group), .bmp (Bitmap Picture). Отличаются они по алгоритмам сжатия, поэтому в разных типах результат имеет разное качество. На данный момент Encoder'ов изображений на ActionScript 3.0 достаточно, и нет необходимости писать их самим. Поэтому мы воспользуемся готовыми:
В сети также полно Encoder'ов и для других типов изображений.

Пример использования PNGEncoder.as

var brr:ByteArray = PNGEncoder.encode(raw);



FileRerence.save();

Теперь полученный экземпляр класса ByteArray необходимо сохранить в файл на компьютере пользователя. Для решения этой задачи можно воспользоваться методом save экземпляра класса flash.net.FileReference.

В версиях Adobe Flash Player раннее 10, 1.5 этого метода нет. Поэтому приходилось отдавать ByteArray на сервер, который сохранял у себя его в файл и отдавал ссылку на него.

var fil:FileReference = new FileReference();
fil.save(brr, "image.png");

Вот что у меня получилось в качестве примера :)





Смотрите также:

понедельник, 15 марта 2010 г.

Проекция точек на карту мира по географическим координатам

В данной статье мы рассмотрим проекцию точек на карту мира по географическим координатам: широте и долготе. А если сказать точнее, то "Мы рассмотрим проекцию городов". Для примера возьмем посетителей этого блога, и покажем на карте их географию.

Выбор карты

Первым делом необходимо выбрать карту, а точнее картографическую проекцию.

Картографические проекции - это математические способы изображения на плоскости поверхности земного эллипсоида или шара.

Проекции различают по характеру изображения:
  • равноугольные, 
  • равновеликие,
  • произвольные; 
и по виду изображений параллелей и меридианов:

Цилиндрические
Конические
Азимутальные
Поликонические
Псевдоконические
Псевдоцилиндрические:
Наиболее популярными являются цилиндрические карты. Мы же выберем превдоцилиндрическую проекцию "Произвольная псевдоцилиндрическая проекция Робинсона (Robinson Cylindrical)".



Преобразование координат

Если посмотреть на вышеприведенную схему, то видно, что величина долготы обратно-пропорциональна модулю значения широты. Т.е. при увеличении модуля широты уменьшается   долгота. А величина широты, прямо-пропорциональна модулю её значению. Т.е. чем больше модуль значения, тем больше величина.

Из этого следует что у нас есть две пропорции, зависящие от значения широты.
  • PLEN - Пропорция изменения величины долготы
  • PDFE - Пропорция изменения величины широты


---------|--------|-------
Latitude | PLEN   | PDFE
---------|--------|-------
00       | 1.0000 | 0.0000
05       | 0.9986 | 0.0620
10       | 0.9954 | 0.1240
15       | 0.9900 | 0.1860
20       | 0.9822 | 0.2480
25       | 0.9730 | 0.3100
30       | 0.9600 | 0.3720
35       | 0.9427 | 0.4340
40       | 0.9216 | 0.4958
45       | 0.8962 | 0.5571
50       | 0.8679 | 0.6176
55       | 0.8350 | 0.6769
60       | 0.7986 | 0.7346
65       | 0.7597 | 0.7903
70       | 0.7186 | 0.8435
75       | 0.6732 | 0.8936
80       | 0.6213 | 0.9394
85       | 0.5722 | 0.9761
90       | 0.5322 | 1.000
Естественно градация в 5 градусов для широты огромна, и для отображения городов на карте не приемлема. Поэтому необходимо заполнить эту табличку для каждого целого числа от 0 до 90 градусов. А уже имея заполненную табличку с пропорциями, несложно сделать преобразование координат. Для всего этого я написал класс, который сделает всё за нас.

ru.as3coder.map.projection.Robinson.as

В конструктор экземпляра нужно передать ссылку на экземпляр карты Робинсона класса flash.display.DisplayObject. При инициализации автоматически заполнятся массивы с пропорциями, после чего будет доступен метод преобразования координат export c параметрами latitude и longitude, который вернет экземпляр класса flash.geom.Point с координатами для указанного в конструкторе экземпляра карты.

var robinson:Robinson = new Robinson(map_sprite);
var point:Point = robinson.convert(55.7558, 37.6176);

География посетителей

В качестве примера я обещал привести географию посещения моего блога на карте мира.


Использованы данные на 11 марта 2010 года.

среда, 3 марта 2010 г.

Документированные и недокументированные возможности файла mm.cfg

При открытие FlashDevelop или любой другой среды разработки, использующей FlexSDK, в папке пользователя появляется загадочный файл mm.cfg.

PolicyFileLog=1
PolicyFileLogAppend=0
ErrorReportingEnable=1
TraceOutputFileEnable=1

Что это за файл - mm.cfg?

Из расширения можно догадаться, что файл конфигурационный. И действительно, этот файл описывает конфигурацию для Adobe Flash Player debug версии. В нем перечислены параметры, которые используются Flash Player'ом для проигрывания .swf-файлов.

Как мы можем его использовать?

А использовать мы его можем для отладки своих приложений. Изменяя параметры этого файла, мы можем получать различную информацию о ходе проигрывания .swf-файла. В официальной справке от Adobe в разделе "Editing the mm.cfg file" приведен небольшой список параметров:

ErrorReportingEnable
Логирования ошибок. Если параметр имеет значение 1, то отладчик будет записывать сообщения об ошибках в журнал. Если значение равно 0, ошибки будут игнорироваться. По умолчанию значение равно 0.

MaxWarnings
Параметр устанавливает максимальное количество предупреждений в журнале, после которого  предупреждения не выводятся. Значение по умолчанию 100. Для того, чтобы отключить ограничение необходимо выставить значение 0.

PolicyFileLog
Логирование политики файла. Если параметр имеет значение 1, то отладчик будет записывать сообщения политики в соответствующий журнал.Если значение равно 0, сообщения будут игнорироваться. По умолчанию значение равно 0.

PolicyFileLogAppend
Позволяет сохранить предыдущие сообщения политики в журнале. Если значение равно 0, то при каждом новом проигрывании журнал очищается, и заполняется снова. Если значение равно 1, то предыдущие записи журнала остаются. Такое бывает удобно при тестировании приложения с множественными загрузками .swf-файлов. По умолчанию значение равно 0.

TraceOutputFileEnable
Параметр позволяет записывать в журнал результаты команды trace(). Если значение равно 1, то результаты команды записываются в журнал, если значение равно 0, то они игнорируются. По умолчанию значение равно 0.

TraceOutputFileName
Имя файла журнала логов приложения. По умолчанию значение равно flashlog.txt. 

В Windows журнал логов и политики находится по адресу C:\Users\UserName\AppData\Roaming\Macromedia\Flash Player\Logs. В остальных смотрите таблицу в справке Adobe.

Но как оказалось, это не все возможные параметры файла mm.cfg...

На блоге Jean-Philippe Auclair, за который ему огромное спасибо, недавно появился пост "AS3 hidden treasure in the mm.cfg file. Revealing and documenting many Flash secrets!" о недокументированных возможностях файла mm.cfg. Расскажу только о двух, которые особенно понравились:

AS3Verbose
Позволяет получить подробную информацию о структуре и разборе байт-кода .swf файла. Параметр принимает значения 1 и 0 соответственно.

AS3Trace
Позволяет получить полную информацию о выполнении сценария Action Script 3.0. Вы можете увидеть полный ход выполнения всех методов и событий. Параметр принимает значения 1 и 0 соответственно.

Полный список параметров смотрите на блоге Jean-Philippe Auclair. Переведенный пост на русский язык вы можете найти на блоге пользователя форума flasher.ru с ником «wvxvw», за что ему громаднейшее спасибо :)
      

Поиск по блогу

Обо мне



Farid Shamsutdinov (AS3Coder)
Russia, Tatarstan, Kazan
as3coder@gmail.com

Подробнее...

Постоянные читатели

© 2014 Farid Shamsutdinov. При копировании материалов, ссылка на источник обязательна. Технологии Blogger.