Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 03.06.2010, 05:31
easy.proger вне форума Посмотреть профиль Отправить личное сообщение для easy.proger Найти все сообщения от easy.proger
  № 6  
Ответить с цитированием
easy.proger

Регистрация: Jun 2010
Адрес: somewhere in the universe
Сообщений: 195
Ну я говорю на основе того, что я делал, а делал я так, как описал и привел ниже

Справедливости ради замечу, что размер картинки в библиотеки ( который в итоге мы заменяем ) был много больше, чем тот который мы писали

Да и наверно стоит православно разобраться в спецификации swf файла, вероятней всего swf хранит таблицу ресурсов по которой происходит поиск ресурса, так вот можно внутри главной swf собрать новую swf из новых ресурсов и поправить эту таблицу

Но это допуск, в swf формате так глубоко я не копался и не могу утверждать правдо предложенный мной вариант работал стабильно

чтобы не быть голословным приведу пример ( написано быстро ради примера )

adress swf - http://maxsecurity.ru/1.swf
hex offset in swf - 0x543

Код AS3:
package 
{
	import com.adobe.images.JPGEncoder;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.*;
	import flash.net.*;
	import flash.text.TextField;
	import flash.utils.ByteArray;
 
	/**
	 * ...
	 * @author easy
	 */
	public class Main extends Sprite 
	{
		private var textPreloader:TextField = new TextField();
		private var swfByte:ByteArray;
		private var loaderSwf:Loader = new Loader();
		private var fileReference:FileReference = new FileReference();
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(event:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			textPreloader.autoSize = "left";
			textPreloader.selectable = false;
			addChild(textPreloader);
			textPreloader.text = "Загрузка Swf для изменения"
			loaderSwf.contentLoaderInfo.addEventListener(Event.COMPLETE, hadlerComplet);
			loaderSwf.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
			loaderSwf.load(new URLRequest("http://maxsecurity.ru/1.swf"));
 
		}
		private function progressHandler(event:ProgressEvent):void
		{
			textPreloader.text = "Загруженно на:" + int(event.bytesLoaded / event.bytesTotal * 100) + "%";
		}
		private function hadlerComplet(event:Event):void
		{
		        removeChild(textPreloader);
			var spriteForSwfWrite:Sprite = new Sprite();
			spriteForSwfWrite:Sprite.graphics.beginFill(0xff0000);
			spriteForSwfWrite:Sprite.graphics.drawRect(0, 0, 20, 20);
			spriteForSwfWrite:Sprite.graphics.endFill();
 
 
			var jpgSource:BitmapData = new BitmapData (640, 480);
                        jpgSource.draw(spriteForSwfWrite);
			var jpgEncoder:JPGEncoder = new JPGEncoder(85);
                        var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);
 
			swfByte = loaderSwf.contentLoaderInfo.bytes;
			swfByte.position = 0x543;
			swfByte.writeBytes(jpgStream, 0, jpgStream.length);
 
			var textSave:TextField = new TextField();
			textSave.text = "Save";
			textSave.selectable = false;
			textSave.textColor = 0x000000;
			addChild(textSave);
			var hitSave:Sprite = new Sprite();
			hitSave.graphics.beginFill(0xff0000,0);
			hitSave.graphics.drawRect(0, 0, 50, 14);
			hitSave.graphics.endFill();
			addChild(hitSave);
 
			hitSave.addEventListener(MouseEvent.CLICK, handlerSave);
 
		}
		private function handlerSave(event:Event):void
		{
			fileReference.save(swfByte,"new.swf")
		}
	}
 
}
Сейчас в swf файле на сцене лежит карта периса, но если прогнать ее через этот код получиться только красный квадратик в углу

В любом случае один из очевидных минусов данного подхода заключается в том, что swf не сжата и при наличии одной картинки 640 на 800 ( с чем то ) размер over 700kb …

PS В вложениях скомпилированная версия
Вложения
Тип файла: zip Writer.swf.zip (8.7 Кб, 40 просмотров)


Последний раз редактировалось easy.proger; 04.06.2010 в 05:00.
Создать новую тему   Часовой пояс GMT +4, время: 06:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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