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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.07.2014, 02:30
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 11  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
Всё просто. У тебя есть путь до картинки, создаешь хеш таблицу/словарь (Object/Dictionary) в качестве ключа путь, а значение BitmapData.
Когда нужна картинка спрашиваешь у хеша, есть ли такое значение по ключу. если нет, то грузишь её и после загрузки добавляешь в хеш и отдаешь нуждающемуся, если есть значение в хеше то создаешь Bitmap с этой BitmapData.

Старый 10.07.2014, 19:17
grafillo! вне форума Посмотреть профиль Отправить личное сообщение для grafillo! Найти все сообщения от grafillo!
  № 12  
Ответить с цитированием
grafillo!

Регистрация: Sep 2011
Сообщений: 366
Цитата:
Сообщение от Nooob Посмотреть сообщение
Всё просто. У тебя есть путь до картинки, создаешь хеш таблицу/словарь (Object/Dictionary) в качестве ключа путь, а значение BitmapData.
Когда нужна картинка спрашиваешь у хеша, есть ли такое значение по ключу. если нет, то грузишь её и после загрузки добавляешь в хеш и отдаешь нуждающемуся, если есть значение в хеше то создаешь Bitmap с этой BitmapData.
О! Вот то что искал, а можешь скинуть пример кода?

Старый 10.07.2014, 19:45
KBAC вне форума Посмотреть профиль Отправить личное сообщение для KBAC Найти все сообщения от KBAC
  № 13  
Ответить с цитированием
KBAC
 
Аватар для KBAC

Регистрация: Jan 2006
Адрес: Москва (Нижний Новгород)
Сообщений: 229
Записей в блоге: 1
Отправить сообщение для KBAC с помощью Skype™
Храните в object'e или словаре соотношения url->BitmapData или Loader и проверяйте, если по такому url уже что-то есть, то не загружать

Ой, не дочитал до конца)
__________________
Будь проще.


Последний раз редактировалось KBAC; 10.07.2014 в 19:46. Причина: не дочитал до конца
Старый 11.07.2014, 00:36
grafillo! вне форума Посмотреть профиль Отправить личное сообщение для grafillo! Найти все сообщения от grafillo!
  № 14  
Ответить с цитированием
grafillo!

Регистрация: Sep 2011
Сообщений: 366
Цитата:
Сообщение от KBAC Посмотреть сообщение
Храните в object'e или словаре соотношения url->BitmapData или Loader и проверяйте, если по такому url уже что-то есть, то не загружать

Ой, не дочитал до конца)
А можно пример кода, как это реализовать?

Старый 11.07.2014, 01:08
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 15  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
Код AS3:
package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;
	import flash.events.ErrorEvent;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.MouseEvent;
	import flash.net.URLRequest;
	import flash.utils.Dictionary;
 
	public class ImageChache extends Sprite
	{
		private const bitmapDataByURL:Object     = new Object();
		private const bitmapsByURL:Object        = new Object();
		private const urlByLoaderInfo:Dictionary = new Dictionary();
 
		public function ImageChache ()
		{
			stage.addEventListener(MouseEvent.CLICK, onClick);
		}
 
		private function onClick (event:MouseEvent):void
		{
			while (numChildren > 0)
			{
				removeChild(getChildAt(0));
			}
			addChild(getImage("http://www.flasher.ru/forum//image.php?u=32784&dateline=1321357870"));
		}
 
		public function getImage (url:String):Bitmap
		{
			var bitmap:Bitmap         = new Bitmap();
			var bitmapData:BitmapData = bitmapDataByURL[url];
			if (bitmapData == null)
			{
				var bitmaps:Vector.<Bitmap> = bitmapsByURL[url];
				if (bitmaps == null)
				{
					bitmaps = new Vector.<Bitmap>();
					bitmapsByURL[url] = bitmaps;
					bitmaps.push(bitmap);
 
					var loader:Loader = new Loader();
					loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
					loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
					urlByLoaderInfo[loader.contentLoaderInfo] = url;
					loader.load(new URLRequest(url));
					return bitmap;
				}
				bitmaps.push(bitmap);
				return bitmap;
			}
			bitmap.bitmapData = bitmapData;
			return bitmap;
		}
 
		private function onLoadError (event:ErrorEvent):void
		{
			var loaderInfo:LoaderInfo = event.target as LoaderInfo;
			loaderInfo.removeEventListener(Event.COMPLETE, onLoadComplete);
			loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError);
 
			trace(event.text);
		}
 
		private function onLoadComplete (event:Event):void
		{
			var loaderInfo:LoaderInfo = event.target as LoaderInfo;
			loaderInfo.removeEventListener(Event.COMPLETE, onLoadComplete);
			loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError);
 
			var url:String              = urlByLoaderInfo[loaderInfo];
			var bitmapData:BitmapData   = (loaderInfo.content as Bitmap).bitmapData;
			var bitmaps:Vector.<Bitmap> = bitmapsByURL[url];
			for each (var bitmap:Bitmap in bitmaps)
			{
				bitmap.bitmapData = bitmapData;
			}
			bitmapDataByURL[url] = bitmapData;
 
			delete bitmapsByURL[url];
			delete urlByLoaderInfo[loaderInfo];
		}
	}
}

Старый 11.07.2014, 07:24
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 16  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Nooob, неплохой вариант) Я обычно делал малость по-другому. А тут в любом случае получишь картинку и поставишь ее в нужное место, независимо от того, загружена она уже или нет
__________________
Ко мне можно и нужно обращаться на ты)

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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