![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2009
Сообщений: 461
|
Можно ли уменьшить разрешение Bitmap'а? Или надо самому отрисовывать по пикселям усредняя цвет? Кто нибудь это делал, меня интересует как долго это происходит, например 4000х4000 уменьшить вдвое.
|
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
отрисовать через BitmapData#draw( исходный_битмап ) с матрицей, к которой применен scale( 0.5, 0.5 )
__________________
Загружаем картинки, минуя ошибки безопасности Последний раз редактировалось i.o.; 07.10.2010 в 11:13. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 461
|
Отлично, спасибо, думал будет гораздо сложнее.
|
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
Bitmap — это наследник класса DisplayObject, следовательно можно воспользоваться сеттерами scaleX и scaleY, без необходимости менять исходную битмапдату и забивать память лишними картинками.
__________________
#flasher@irc.trg.ru:6667 |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 461
|
Obi, нельзя. Разрешение при этом не меняется, изменяется размер отображения, но твой проц все равно будет обрабатывать все 4000х4000 пикселей, хоть уменьшай его до одного пикселя.
|
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
> Разрешение при этом не меняется, изменяется размер отображения, но твой проц все равно будет обрабатывать все 4000х4000 пикселей
Откуда такая информация? Потратил 20 минут и проверил. Разницы в производительности никакой нет, однако изменение размера при помощи матрицы сразу ставит крест на динамическом изменении размеров картинки. По поводу производительности — оно и понятно, флеш не такой дурак чтобы считать все в лоб. Я уверен, что он кеширует изображение, не перерисовываая его каждый раз. Следовательно, scale выполняется единожды, и при следующей отрисовке заново не пересчитывается.
__________________
#flasher@irc.trg.ru:6667 |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 461
|
Obi, у меня другая практика и разница в производительности огромная. Может в отображении одной картинке и не видна разница, но это не доказывает что ее - нет. Но когда я скейлю 200 картинок, то начинаются безумные тормоза при отображении. FPS падает в 5+ раз.
|
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
А можно код теста?
Если кеширует, то не понятно, зачем нужен cacheAsBitmap, например. И вообще интересно.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Человек уже получил ответ на вопрос, как ему уменьшить разрешение. Зачем докапываться "а для каких вам целей", да "плеер не дурак".. лишь бы пооффтопить - для этого флейм есть.
__________________
Загружаем картинки, минуя ошибки безопасности Последний раз редактировалось i.o.; 07.10.2010 в 13:58. |
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
50 картинок. Все еще не вижу разницы.
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); Это и есть Bitmap. cashAsBitmap - Bitmap. Тафтология. Добавлено через 4 минуты Цитата:
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, время: 23:22. |
|
|
« Предыдущая тема | Следующая тема » |
|
|