|
|
|||||
Регистрация: Jun 2009
Сообщений: 461
|
Как уменьшить разрешение Bitmap'а?
Можно ли уменьшить разрешение 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, время: 16:32. |
|
« Предыдущая тема | Следующая тема » |
|
|