<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3385245604965826517</id><updated>2011-07-08T00:31:52.231+03:00</updated><category term='Frame'/><category term='временная диаграмма'/><category term='display list'/><category term='web-анимация'/><category term='Flash'/><category term='Character ID'/><category term='SWF'/><category term='визуальный объект'/><category term='Scene'/><category term='PlaceObject'/><category term='timeline'/><title type='text'>Adobe Flash глазами Delphi-программиста</title><subtitle type='html'>Для тех, кто хочет понять как устроены flash-файлы и все что нужно для чтения/создания SWF.&lt;br&gt;
Английский вариант блога находится здесь &lt;a href="http://delphiflash.blogspot.com"&gt;delphiflash.blogspot.com&lt;/a&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://delphiflash-ru.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3385245604965826517/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://delphiflash-ru.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Oleg Grabets</name><uri>http://www.blogger.com/profile/03703936404690425730</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TfzrV3oWKTI/SQCWT2KNSrI/AAAAAAAAAAg/aD5fdUGp6jU/S220/grol.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3385245604965826517.post-5808215256411483777</id><published>2010-09-16T15:08:00.002+03:00</published><updated>2010-09-16T15:12:41.127+03:00</updated><title type='text'>Добро пожаловать на DelphiFlash.com за новыми статьями</title><content type='html'>Дорогие читатели! Статьи о Delphi + Flash теперь вы также сможете найти на сайте &lt;a href="http://delphiflash.com/"&gt;delphiflash.com&lt;/a&gt;. В &lt;a href="http://www.delphiflash.com/code-library"&gt;разделе статей на delphiflash.com&lt;/a&gt; вы найдёте как новые статьи, так и другую полезную информацию о технологиях Delphi + Flash. Ваши комментарии к статьям на сайте приветствуются!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3385245604965826517-5808215256411483777?l=delphiflash-ru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiflash-ru.blogspot.com/feeds/5808215256411483777/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3385245604965826517&amp;postID=5808215256411483777' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3385245604965826517/posts/default/5808215256411483777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3385245604965826517/posts/default/5808215256411483777'/><link rel='alternate' type='text/html' href='http://delphiflash-ru.blogspot.com/2010/09/delphiflashcom.html' title='Добро пожаловать на DelphiFlash.com за новыми статьями'/><author><name>Oleg Grabets</name><uri>http://www.blogger.com/profile/03703936404690425730</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TfzrV3oWKTI/SQCWT2KNSrI/AAAAAAAAAAg/aD5fdUGp6jU/S220/grol.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3385245604965826517.post-4026416236853035607</id><published>2008-12-05T21:25:00.005+02:00</published><updated>2008-12-05T21:44:05.009+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='визуальный объект'/><category scheme='http://www.blogger.com/atom/ns#' term='Character ID'/><title type='text'>Визуальные объекты</title><content type='html'>&lt;p&gt;Flash технология поддерживает ряд встроенных визуальных объектов, но количество разновидностей ограничено, поэтому в большинстве случаев нужные элементы, например Graphics User Interface, создаются путем комбинирования нескольких "стандартный" объектов. Все стандартные объекты определяются в DefineXXX. К основным визуальным объектам можно отнести: Фигура (Shape), Морфируемая фигура (MorphShape), Статический Текст (Static Text), Динамический текст (Dynamic Text), Кнопка (Button), Видео (Video) и Спрайт (Sprite).&lt;/p&gt; &lt;br /&gt;&lt;p&gt;Обратите внимание, что нет объекта Изображение (Image). Чтобы отобразить изображение его необходимо использовать в качестве заливки для прямоугольной фигуры.&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Уникальный идентификатор CharacterID&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Каждый визуальный объект имеет свой уникальный CharacterID – число типа word , т.е. значение в диапазоне 0..$FFFF. Если вы самостоятельно создаете объекты, то должны позаботится о его уникальности. Уникальность необходима для того, чтобы плеер однозначно понимал какой объект использовать при обработке tagPlaceObject.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Когда необходимо «склеить» несколько SWF, то первая задача состоит в том, что необходимо обеспечить уникальность этих CharacterID, в противном случае некоторые объекты просто не будут отображаться. Для этого необходимо переопределить все значения в одной из SWF путем изменения значений на заведомо незанятое значение.&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Имена объектов&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Как я отмечал ранее, имя назначается экземпляру объекта в tagPlaceObject при этом указание CharacterID обязательно. Можно создать несколько экземпляров одного объекта с разными именами. Опять таки, при склеивании двух SWF необходимо обеспечить уникальность имен. Имена как правило используются в ActionScript для управления этими экземплярами, поэтому в случае переименования объектов необходимо сделать соответствующие корректировки в ActionScript.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3385245604965826517-4026416236853035607?l=delphiflash-ru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiflash-ru.blogspot.com/feeds/4026416236853035607/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3385245604965826517&amp;postID=4026416236853035607' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3385245604965826517/posts/default/4026416236853035607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3385245604965826517/posts/default/4026416236853035607'/><link rel='alternate' type='text/html' href='http://delphiflash-ru.blogspot.com/2008/12/blog-post.html' title='Визуальные объекты'/><author><name>Oleg Grabets</name><uri>http://www.blogger.com/profile/03703936404690425730</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TfzrV3oWKTI/SQCWT2KNSrI/AAAAAAAAAAg/aD5fdUGp6jU/S220/grol.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3385245604965826517.post-6085780250127470128</id><published>2008-11-16T22:47:00.005+02:00</published><updated>2008-11-17T00:04:49.979+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SWF'/><category scheme='http://www.blogger.com/atom/ns#' term='PlaceObject'/><category scheme='http://www.blogger.com/atom/ns#' term='Scene'/><category scheme='http://www.blogger.com/atom/ns#' term='display list'/><category scheme='http://www.blogger.com/atom/ns#' term='Frame'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Кадр, сцена или список отображения</title><content type='html'>&lt;p&gt;Как я отмечал ранее, отображение происходит когда в SWF встречается тэг ShowFrame. Для того, чтобы отобразить какой либо визуальный объект его сперва нужно описать (тэги с названиями DefineXXX), а затем поместить на нужную глубину при помощи тэгов PlaceObject. Размещать объект можно многократно, таким образом получается эффект клонирования. В зависимости от параметров тэга PlaceObject экземпляры (instance) визуального объекта могут выглядеть совершенно по разному. Отображаются экземпляры, до тех пор, пока не будут принудительно удалены тэгом RemoveObject. Это  позволяет определять, размещать и удалять экземпляры объектов в разных кадрах.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://3.bp.blogspot.com/_TfzrV3oWKTI/SSCK2rfar_I/AAAAAAAAABg/8i1ZZwjHR_Y/s1600-h/depth.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 142px;" src="http://3.bp.blogspot.com/_TfzrV3oWKTI/SSCK2rfar_I/AAAAAAAAABg/8i1ZZwjHR_Y/s400/depth.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5269364236015546354" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Глядя на эту схему можно ответить на вопрос, какие объекты отображаются в определенном кадре - нужно составить список из всех PlaceObject, которые были до текущего кадра и убрать из этого списка те, какие были удалены тэгом RemoveObject. Нужно также учесть,  что PlaceObject может иметь флаг PlaceFlagMove который указывает что занятую глубину нужно очистить, т.е. это аналог RemoveObject в одном тэге.&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Обзор PlaceObject&lt;/h2&gt;&lt;p&gt;Основной тэг, который используется при указании какой объект, где и как должен отображаться. По мере развития SWF формата в этот тэг добавлялись дополнительные параметры и сейчас существует три "редакции": tagPlaceObject, tagPlaceObject2 и  tagPlaceObject3.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Основные параметры:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Depth&lt;/b&gt; - глубина, на которую помещается объект. Чем больше значение, тем «выше» изображение. Поскольку для этого параметра отводится 2 байта, то максимальное значение 65535. Для корректного отображение на глубине не должно быть других объектов, в противном случае нужно установить флаг PlaceFlagMove в true.&lt;/li&gt;&lt;li&gt;&lt;b&gt;CharacterId&lt;/b&gt; - Идентификатор существующего объекта.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Name&lt;/b&gt; - имя экземпляра объекта. Имя может использоваться в ActionScript для программирования анимации и интерактивности.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Matrix&lt;/b&gt; - группа параметров для геометрической трансформации. Сюда входят TranslateX и TranslateY для указания положения (ноль в левом верхнем углу), ScaleX и ScaleY для уменьшения или увеличения, SkewX и SkewY для скоса и поворотов.&lt;/li&gt;&lt;li&gt;&lt;b&gt;ColorTransform&lt;/b&gt; - группа параметров для цветовой трансформации. Сюда входят addR, addG, addB и addA для изменения цветовых составляющих путем добавления заданных величин, multR, multG, multB и multA для изменения цветовых составляющих путем умножения на заданные величины.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Устанавливая разные параметры в разных кадрах мы получаем анимацию. Например, изменяя значения Translate создается движение. Изменяя addA или multA создается эффект появления или исчезновения.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3385245604965826517-6085780250127470128?l=delphiflash-ru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiflash-ru.blogspot.com/feeds/6085780250127470128/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3385245604965826517&amp;postID=6085780250127470128' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3385245604965826517/posts/default/6085780250127470128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3385245604965826517/posts/default/6085780250127470128'/><link rel='alternate' type='text/html' href='http://delphiflash-ru.blogspot.com/2008/11/display-list.html' title='Кадр, сцена или список отображения'/><author><name>Oleg Grabets</name><uri>http://www.blogger.com/profile/03703936404690425730</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TfzrV3oWKTI/SQCWT2KNSrI/AAAAAAAAAAg/aD5fdUGp6jU/S220/grol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TfzrV3oWKTI/SSCK2rfar_I/AAAAAAAAABg/8i1ZZwjHR_Y/s72-c/depth.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3385245604965826517.post-4828087471733917087</id><published>2008-10-29T12:27:00.004+02:00</published><updated>2008-10-29T12:34:04.947+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SWF'/><category scheme='http://www.blogger.com/atom/ns#' term='timeline'/><category scheme='http://www.blogger.com/atom/ns#' term='временная диаграмма'/><title type='text'>Временная  диаграмма (TimeLine)</title><content type='html'>&lt;p&gt;Flash-player воспроизводит SWF по кадрам. Это происходит когда flash-player встречает tagShowFrame, т.е. ни какие изменения в отображении нельзя увидеть пока не будет этого тэга. Частота отображения задается в заголовке файла величиной FPS. Умножив количество кадров на значение FPS можно вычислить длительность проигрывания swf.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Это в теории, но на практике все намного сложнее и вот почему.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Дело в том, что SWF может быть не простым фильмом, а сложным логическим сценарием с элементами интерактивности. Переход от кадра к кадру может происходить в произвольной последовательности, в том числе с остановкой на кадрах с целью ожидания реакции пользователя. Фактически, такие SWF являются вэб-приложениями.&lt;br /&gt;&lt;/p&gt;Кроме того, в movie можно использовать специальные объекты Спрайты (Sprite), в терминологии  Flash IDE их называют MovieClip. Спрайты имеют такую же структуру как SWF (набор тэгов) и свою временную диаграмму. Так вот, встречаются SWF с одним кадром в SWF, где вся анимация происходит в спрайтах.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;И на последок. Иногда flash-плеер не успевает подготовить кадр для отображения. Как правило, это происходит когда в кадре выполнятся трансформация изображений или присутствуют многочисленные наложения масок друг на друга. В этих случаях обновления происходят заметно реже, чем указано в FPS.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Вывод.&lt;/strong&gt; В большинстве случаев НЕЛЬЗЯ определить длительность SWF. В большинстве случаев НЕЛЬЗЯ перемотать SWF, например на 3-ий кадр, если вы не знаете структуру и сценарий movie.  В большинстве случаев НЕЛЬЗЯ узнать, закончился ли проигрыватся SWF, поскольку "дейстивие" может происходить не в основной временной диаграмме, а в спрайтах.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3385245604965826517-4828087471733917087?l=delphiflash-ru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiflash-ru.blogspot.com/feeds/4828087471733917087/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3385245604965826517&amp;postID=4828087471733917087' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3385245604965826517/posts/default/4828087471733917087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3385245604965826517/posts/default/4828087471733917087'/><link rel='alternate' type='text/html' href='http://delphiflash-ru.blogspot.com/2008/10/timeline.html' title='Временная  диаграмма (TimeLine)'/><author><name>Oleg Grabets</name><uri>http://www.blogger.com/profile/03703936404690425730</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TfzrV3oWKTI/SQCWT2KNSrI/AAAAAAAAAAg/aD5fdUGp6jU/S220/grol.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3385245604965826517.post-8230353021579389102</id><published>2008-10-08T16:31:00.015+03:00</published><updated>2008-10-23T18:34:13.819+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SWF'/><category scheme='http://www.blogger.com/atom/ns#' term='web-анимация'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Вступление. Структура SWF.</title><content type='html'>&lt;p&gt;Думаю, что каждый был в неловкой ситуации, когда вам задают "неправильный" вопрос из-за того, что задающий не в теме вопроса. В такой ситуации не поймешь, с чего начинать отвечать, поэтому я начну... с самого начала.&lt;/p&gt;&lt;h2&gt;Вступление&lt;/h2&gt;&lt;p&gt;Когда мы говорим &lt;strong&gt;Flash&lt;/strong&gt;, то можем подразумевать совершенно разные вещи даже в рамках терминов web-технологии. Чтобы не было путаницы, я буду использовать: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Flash&lt;/strong&gt; – технология web-анимации в целом;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Flash player&lt;/strong&gt; – программа, библиотека ActiveX которая выполняет отображение flash;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Standalone Flash player&lt;/strong&gt; – приложение (exe-файл), отображающее flash;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Flash IDE, Adobe Flash, Flash Professional&lt;/strong&gt; – среда разработки, предоставляемая фирмой Adobe (ранее Macromedia);&lt;/li&gt;&lt;li&gt;&lt;strong&gt;FLA&lt;/strong&gt; – проектный файл (исходный) анимации для Flash IDE;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Movie, мувик&lt;/strong&gt; – цельная сущность web-анимации на этапе разработки;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;SWF&lt;/strong&gt; – непосредственно конечный файл анимации.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;И так, когда мы открываем web-страницу, на которой находится flash анимация, в упрощенном варианте происходит следующее: интернет-браузер в html разметке обнаруживает вставку flash-анимации, создает объект flash-плеера и указывает ему какой файл нужно отобразить. Flash-плеер выполняет загрузку swf, и, если это возможно, начинает его отображать. Благодаря такому принципу работы flash-плеер может отображать так называемые прелоадеры (preloaders), воспроизводить потоковый звук и видео (как, например, YouTube) без полной загрузки самого swf.&lt;/p&gt;&lt;h2&gt;Структура SWF&lt;/h2&gt;&lt;p&gt;Формат файла описан в документе SWF File format specification, который можно загрузить с сайта &lt;a href="http://adobe.com/"&gt;Adobe.com&lt;/a&gt;. Обычно документация опаздывает от выхода новых версий flash-плееров до полугода. На момент написания данного текста уже выпущен 10-ый flash-player, но файл спецификации не обновлен и содержит описание только 9-ой версии. Почти про все, что я здесь буду писать, можно найти спецификации, но в том то и дело, что "почти все" :)&lt;/p&gt;&lt;p&gt;Базовая структура SWF не зависит от версии, поэтому SWF всегда имеет структуру Header + Body. Body в свою очередь состоит из записей, которые в терминологии спецификации называют тэгами (tags).&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TfzrV3oWKTI/SQCCuoUtjzI/AAAAAAAAAAU/fFAPizqvFCY/s1600-h/swf-structure.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 47px;" src="http://2.bp.blogspot.com/_TfzrV3oWKTI/SQCCuoUtjzI/AAAAAAAAAAU/fFAPizqvFCY/s400/swf-structure.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5260348102378622770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Для описания структуры данных я буду использовать синтаксис Object Pascal.&lt;/p&gt;&lt;h2&gt;Header&lt;/h2&gt;Заголовок содержит основную информацию о SWF и ее можно описать так: &lt;br /&gt;&lt;pre&gt;TSWFHeader = packed record&lt;br /&gt;   SIGN: array [0..2] of AnsiChar;&lt;br /&gt;   Version: byte;&lt;br /&gt;   FileSize: LongWord;&lt;br /&gt;   MovieRect: TRect;&lt;br /&gt;   FPS: word;&lt;br /&gt;   FramesCount: word;&lt;br /&gt; end;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Первым параметром идет сигнатура &lt;strong&gt;SIGN&lt;/strong&gt;. Значение CWS указывает, что данный файл упакован ZLib-компрессией, а FWS - нет. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt; – версия формата файла.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;FileSize&lt;/strong&gt; – размер в байтах НЕСЖАТОГО файла.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;MovieRect&lt;/strong&gt; – размер изображения на экране в твипсах (1px = 20twips). Учитывая эти единицы нужно отметить, что, фактически, SWF и графические объекты не могут быть больше, чем $ffff / 20 = 3276 px. &lt;br /&gt;Я не встречал swf, в которых top-left значения больше или меньше 0, но задав эти значения в своих тестах убедился, что эти значения таки учитываются. &lt;br /&gt;Стоит отметить, что указанный прямоугольник является «посадочным местом» которое отводится в браузерах. Если открыть swf в Standalone-плеере, то иногда можно увидеть "декорации за кадром".&lt;/li&gt;&lt;li&gt;&lt;strong&gt;FPS&lt;/strong&gt; (frames per second) – значение в формате 8.8 fixed, т.е. для человеческого восприятия это значение Result := FPS shr 8 + (FPS and $FF) / ($FF+1);&lt;/li&gt;&lt;li&gt;&lt;strong&gt;FramesCount&lt;/strong&gt; – количество кадров. Как правило, минимум один кадр всегда есть, но можно делать swf и без кадров, если этот файл служит как библиотека для других swf.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Компрессия в SWF&lt;/h2&gt;&lt;p&gt;Для уменьшения размера файла Macromedia применила два подхода.&lt;br /&gt;Первый заключается в том, что для сохранения чисел используется побитовая упаковка. Выглядит это примерно так. Допустим, нам нужно сохранить размер прямоугольника, т.е. четыре числа типа integer. При простой записи это будет 4 * 4 байта = 16 байт. При записи в swf в первые 5 бит записывается число бит, необходимое для кодирования самого большого значения, а затем эти 4 значения в битовом представлении с указанной длиной бит. Например, нужно сохранить координаты (0, 0 - 100, 100) в переводе на твипсы (0, 0 - 2000, 2000). В битовом представлении число 2000 = 11111010000 (11 бит + 1 для знака). Выходит (5 + 4 * 12)  / 8 =  7 байт, что меньше почти в двое. &lt;br /&gt;Такой подход приводит к тому, что некоторые одинаковые тэги могут иметь разный размер. Это также относится и к Header.&lt;/p&gt;&lt;p&gt;Второй подход - это использование ZLib компрессии как в целом для всего swf, так и для отдельных тэгов. &lt;/p&gt;&lt;p&gt;Когда файл компрессированный, то первые три параметра Header-а (это 8 байт) не упакованы, а остальные упакованы и это объясняет, почему нельзя одним методом Read считать только заголовок swf. &lt;br /&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3385245604965826517-8230353021579389102?l=delphiflash-ru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiflash-ru.blogspot.com/feeds/8230353021579389102/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3385245604965826517&amp;postID=8230353021579389102' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3385245604965826517/posts/default/8230353021579389102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3385245604965826517/posts/default/8230353021579389102'/><link rel='alternate' type='text/html' href='http://delphiflash-ru.blogspot.com/2008/10/swf.html' title='Вступление. Структура SWF.'/><author><name>Oleg Grabets</name><uri>http://www.blogger.com/profile/03703936404690425730</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TfzrV3oWKTI/SQCWT2KNSrI/AAAAAAAAAAg/aD5fdUGp6jU/S220/grol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TfzrV3oWKTI/SQCCuoUtjzI/AAAAAAAAAAU/fFAPizqvFCY/s72-c/swf-structure.gif' height='72' width='72'/><thr:total>4</thr:total></entry></feed>
