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

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

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

Регистрация: Jun 2009
Сообщений: 461
Question Как уменьшить разрешение Bitmap'а?

Можно ли уменьшить разрешение Bitmap'а? Или надо самому отрисовывать по пикселям усредняя цвет? Кто нибудь это делал, меня интересует как долго это происходит, например 4000х4000 уменьшить вдвое.

Старый 07.10.2010, 11:11
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
отрисовать через BitmapData#draw( исходный_битмап ) с матрицей, к которой применен scale( 0.5, 0.5 )


Последний раз редактировалось i.o.; 07.10.2010 в 11:13.
Старый 07.10.2010, 11:12
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 3  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
Отлично, спасибо, думал будет гораздо сложнее.

Старый 07.10.2010, 11:14
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 4  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Bitmap — это наследник класса DisplayObject, следовательно можно воспользоваться сеттерами scaleX и scaleY, без необходимости менять исходную битмапдату и забивать память лишними картинками.
__________________
#flasher@irc.trg.ru:6667

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

Регистрация: Jun 2009
Сообщений: 461
Obi, нельзя. Разрешение при этом не меняется, изменяется размер отображения, но твой проц все равно будет обрабатывать все 4000х4000 пикселей, хоть уменьшай его до одного пикселя.

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

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
> Разрешение при этом не меняется, изменяется размер отображения, но твой проц все равно будет обрабатывать все 4000х4000 пикселей
Откуда такая информация?

Потратил 20 минут и проверил. Разницы в производительности никакой нет, однако изменение размера при помощи матрицы сразу ставит крест на динамическом изменении размеров картинки. По поводу производительности — оно и понятно, флеш не такой дурак чтобы считать все в лоб. Я уверен, что он кеширует изображение, не перерисовываая его каждый раз. Следовательно, scale выполняется единожды, и при следующей отрисовке заново не пересчитывается.
__________________
#flasher@irc.trg.ru:6667

Старый 07.10.2010, 12:30
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 7  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
Obi, у меня другая практика и разница в производительности огромная. Может в отображении одной картинке и не видна разница, но это не доказывает что ее - нет. Но когда я скейлю 200 картинок, то начинаются безумные тормоза при отображении. FPS падает в 5+ раз.

Старый 07.10.2010, 12:33
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 8  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
А можно код теста?
Если кеширует, то не понятно, зачем нужен cacheAsBitmap, например. И вообще интересно.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 07.10.2010, 12:44
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 9  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Человек уже получил ответ на вопрос, как ему уменьшить разрешение. Зачем докапываться "а для каких вам целей", да "плеер не дурак".. лишь бы пооффтопить - для этого флейм есть.


Последний раз редактировалось i.o.; 07.10.2010 в 13:58.
Старый 07.10.2010, 13:02
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 10  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
50 картинок. Все еще не вижу разницы.
Код AS3:
const MATRIX_SCALING:Boolean = false;
 
var bitmapVector:Vector.<Bitmap> = new Vector.<Bitmap>();
 
generateBitmaps(50);
 
function generateBitmaps(count:int):void {
	while(count-- > 0) {
		var bmd:BitmapData = new BitmapData(1000, 1000, true, 0xFF << 24 | Math.random()*0xFFFFFF);
		brbrBitmapData(bmd);
 
		var scaleFactor:Number = 0.3;
 
		var bm:Bitmap;
		if(!MATRIX_SCALING) {
			bm = new Bitmap(bmd);
			bm.scaleX = bm.scaleY = scaleFactor;
		}else {
			var mtx:Matrix = new Matrix();
			mtx.scale(scaleFactor, scaleFactor);
 
			var scaledBmd = new BitmapData(bmd.width*scaleFactor, bmd.height*scaleFactor);
			scaledBmd.draw(bmd, mtx);
			bm = new Bitmap(scaledBmd);
		}
 
		bm.x = Math.random()*stage.stageWidth/2;
		bm.y = Math.random()*stage.stageHeight/2;
		addChild(bm);
		bitmapVector.push(bm);
	}
}
 
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
 
function enterFrameHandler(event:Event):void {
	var len:int = bitmapVector.length;
	for(var i:int = 0; i < len; i++) {
		var bm:Bitmap = bitmapVector[i];
		bm.rotation ++;
	}
}
 
// just fun
function brbrBitmapData(bitmapData:BitmapData):void {
	var len:int = (bitmapData.width * bitmapData.height) / 10;
	for(var i:int = 0; i < len; i++) {
		bitmapData.setPixel32(Math.random()*bitmapData.width, Math.random()*bitmapData.height, Math.random()*0xFFFFFFFF);
	}
}
 
var fpsTextField:FPSBox = new FPSBox();
fpsTextField.textColor = 0xFFEA2B;
addChild(fpsTextField);
> Если кеширует, то не понятно, зачем нужен cacheAsBitmap

Это и есть Bitmap. cashAsBitmap - Bitmap. Тафтология.

Добавлено через 4 минуты
Цитата:
Сообщение от i.o. Посмотреть сообщение
Человек уже получил вопрос, как ему уменьшить разрешение. Зачем докапываться "а для каких вам целей", да "плеер не дурак".. лишь бы пооффтопить - для этого флейм есть.
Это не флейм, а выяснение истины. Всем будет полезно узнать, например, что scale медленнее, чем трансформация bitmapDat'ы с помощью матрицы, или наоборот. Если вам не интересно — проходите мимо.

UPD: уменьшил размер битмапдат и нагенерировал заявленные 200 штук. Разницы все равно не увидел.
UPD2: в качестве счетчика фпс был использован класс FPSBox отсюда: http://blog.efnx.com/wp-content/uplo...113.src.tar.gz
__________________
#flasher@irc.trg.ru:6667


Последний раз редактировалось Obi; 07.10.2010 в 13:32.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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