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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.12.2010, 18:46
qmel вне форума Посмотреть профиль Отправить личное сообщение для qmel Найти все сообщения от qmel
  № 1  
Ответить с цитированием
qmel

Регистрация: Dec 2010
Сообщений: 23
По умолчанию Показ изображений с очень большим разрешением

Здравствуйте!

Мне в большом рабочем проекте необходимо показывать тумбнейлы изображений с очень большим разрешением. Больше чем 8000x8000. Я использую Flex sdk 3.4 и AIR 2.5.1. По документации у них ограничения на BitmapData

Код AS3:
В AIR 1.5 и Flash Player 10 максимальный размер объекта BitmapData составляет 8,191 пикселя в ширину или высоту, а общее количество пикселей не может превышать 16,777,215. (Т. е. если ширина объекта BitmapData составляет 8,191 пикселя, его высота не может быть больше 2 048 пикселей.)
Тумбнейлы от изображений размером 8000x8000, как ни странно, генерятся по команде image.scaleContent=true без проблем и задержек. Тумбнейлы от больших по размеру изображений не показываются. Поэтому думаю использовать класс BigAssCanvas от Keith Peters-а
http://www.bit-101.com/blog/?p=1199 .

Я сделал маленький проект чтоб посмотреть получится ли отображать огромные рисунки с помощью этого BigAssCanvas . Итак, проблемы:

1. Рисунки обычного разрешения вплость до 8000x8000 отображаются, 10024x9352 и выше - нет.
2. В принципе, мне не нужно показывать рисунок целиком, достаточно сгенерить тумбнейл среднего размера, но я не знаю как это сделать используя BigAssCanvas, а не стандартное image.scaleContent.

Так как BigAssCanvas писался для более старой версии Flex там везде соит ограничение 2880, пробую ставить 8191 по документации - падает. Поэтому видимо и толку от этой канвы нет, но вопрос, в таком случае, какие и куда ограничения ставить?

Код AS3:
var bmp:Bitmap = new Bitmap(new BitmapData(Math.min(2880, w), Math.min(2880, h), _transparent, _color));
Привожу код пробного приложения. Там еще есть progrees bar, чтоб ждать загрузки большого изображения, но она тоже пока не работает.

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml">
 
	<mx:Script>
		<![CDATA[
			import flash.display.Bitmap;
			import flash.display.BitmapData;
			import flash.display.Sprite;
			import flash.text.TextField;
 
			import mx.controls.Image;
			import mx.controls.ProgressBar;
			import mx.controls.ProgressBarMode;
			import mx.core.UIComponent;
 
			import ui.BigCanvas;
			import ui.UISprite;
 
			private var _bmpfull:BigCanvas;
			public var simpleSprite:Sprite = new Sprite();
			public var _progressBar:ProgressBar = new ProgressBar();
 
			public function Load(path:String ): void
			{
				var file: File = new File(path);
				var img: Image = new Image();						
				img.addEventListener( Event.COMPLETE, onImageLoaded );
				img.load( file.url );
			}
 
			public function onImageLoaded( e:Event ):void
			{
				var img: Image = e.target as Image;
				img.scaleContent=false;
 
				var ImageBitmap:Bitmap = (img.content as Bitmap);
				_bmpfull = new BigCanvas(ImageBitmap.width, ImageBitmap.height, true, 0x00000000) ;				
				img.removeEventListener( Event.COMPLETE, onImageLoaded );
 
				_bmpfull.draw(ImageBitmap);
				simpleSprite.addChild(_bmpfull);
				var uic:UIComponent = new UIComponent();
				uic.addChild(simpleSprite);
				mycanvas.addChild(uic);
 
				uic.addEventListener(ProgressEvent.PROGRESS, progressHandler);
				uic.addEventListener(Event.COMPLETE, completeHandler);
 
				_progressBar.mode = ProgressBarMode.MANUAL;
				_progressBar.percentWidth = 100;
				_progressBar.setStyle("horizontalCenter", "0");
				_progressBar.setStyle("verticalCenter", "0");
				uic.addChild(_progressBar);
				_progressBar.visible = false;
 
			}
 
			private function progressHandler(e:ProgressEvent):void {
				_progressBar.setProgress(e.bytesLoaded,e.bytesTotal);
				_progressBar.visible = e.bytesLoaded < e.bytesTotal;
			}
 
			private function completeHandler(e:Event):void {
				_progressBar.visible = false;
			}
 
		]]>
	</mx:Script>
 
	<mx:Canvas id="mycanvas" height="100%" width="100%">
			<mx:Button label="load images" click="{Load( 'C:/tmp/8000x8000.jpg' )}" />
	</mx:Canvas>
 
</mx:WindowedApplication>

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

Теги
bigasscanvas , image , large , tumbnails
Опции темы
Опции просмотра

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

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


 


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


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