69. [junior] Чем отличаются Bitmap и BitmapData?

junior – серия статей для начинающих ActionScript-разработчиков.
Все статьи серии:
http://flashpress.ru/blog/category/junior/

Меня часто спрашивают, чем отличаются классы Btmap и BitmapData? В этой статье я постараюсь дать наиболее полный ответ на этот вопрос. Пожалуй я отвечу вам вопросом на вопрос. Вот скажите мне, чем отличается ведро от воды? Вы скажете что это глупый вопрос, и нет ни малейшего желания отвечать на него. И я с вами соглашусь. На самом деле, ответ на поставленный в статье вопрос, столь же прост. Класс Bitmap служит для отображения BitmapData. Вы не сможете руками взять и отнести воду, для этого нужна ёмкость, например ведро. Точно так же вы не сможете отобразить на экране объект BitmapData, что бы его отобразить, его необходимо поместить в объект Bitmap. Класс BitmapData представлять собой массив пикселей , точнее массив цветов пикселей. А класс Bitmap это визуальный компонент, который можно поместить на stage методом addChild.

Может возникнуть вопрос: зачем нужны два объекта? когда можно было бы сделать так что бы BitmapData отображался на stage. Представьте себе ситуацию когда вам надо сделать программный снег с помощью ActionScrit 3.0. Сам по себе объект класса BitmapData занимает много места в оперативной памяти, ровно столько сколько весит используемый png-файл. А это значит что если создать 100 снежинок, то флешка сожрет 100xN байт оперативной памяти. Что не очень хорошо отразится на производительности вашего flash приложения. Что бы избежать этих проблем, надо один раз создать объект класса BitmapData, и создавать хоть 1000 объектов Bitmap, которые будут отображать один и тот же объект BitmapData. Сам по себе объект Bitmap весит очень мало.

Для того что бы понять как полученные выше знания применять на практике, давайте напишем простое приложение которое отображает снег.
В этом примере, создается всего одна снежинка – экземпляр класса BitmapData. Если вы хотите уничтожить объект класса BitmapData, можно вызвать метод dispose(). В нашем случае, ели мы вызовем этот метод в момент когда на stage куча снежинок, они все пропадут разом. Потому что все объекты Bitmap содержат один и тот же BitmapData. Для наглядности допишем наше приложение – сделаем кнопки “старт” и “очистить”. Первая стартует падение снега, а вторая убивает BitmapData методом dispose.

FlashBuilderFlashIDE
Код для редактора Adobe FlashBuilder
Код для редактора Adobe Flash CS Professional
Имейте ввиду что если вы вызвали метод dispose у объекта BitmapData, то картинка будет уничтожена навсегда. И оперативная память выделенная под эту картинку, будет освобождена. Если вы захотите вернуть картинку, вам придется создавать её заново, используя оператор new

Если вы посмотрите внимательно на код создания переменной snowBitmapData:BitmapData в проектах FlashBuilder(строки 121-122) и Adobe Flash CS(строка 97), вы заметите что объекты BimapData в них создаются немного по разному. В проекте FlashBuilder мы использовали тег Embed, а при создании экземпляра new SnowClass() у нас получается объект Bitmap, внутри которого уже лежит необходимый объект BitmapData. А вот если вы пишите код в редакторе Flash CS, и картинку вы создаете из объекта в библиотеке, то строка new SnowClass() вам вернет объект класса BitmapData. Не забудьте в проекте Flash CS задать вашей картинке в библиотеке имя класса SnowClass

Вот такой вот снег получился у меня:

Здесь должна быть флешка. Установите Flash Player

Скачать исходники можно здесь.
Эту статью прочитали 1995 раз

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

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


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




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




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