![]() |
Pixelization
Необходимо сделать данный эффект http://http://www.infosci.cornell.ed...on-15pixel.jpg
собственно нужна помощь по алгоритму для него или вообще любая в этом плане. |
Я бы делал так:
Делишь картинку на блоки, считываешь каждый блок BitmapData.getPixels в ByteArray. Пробегаешься по ByteArray высчитывая средне-арифметический цвет. Заливаешь весь ByteArray этим цветом, кладешь блок назад в картинку BitmapData.setPixels На первый взгляд ничего сложно... |
Могу предложить 2 варианта, совместимых с AS2.0 и ниже.
Насчёт скорости ничего сказать не могу. 1. Используем DispacementMapFilter и специально построенную карту трансформации. Правда, при этом цвет каждого квадрата будет не средним арифметическим всех содержащихся в нём пикселей, а будет выбран какой-то один конкретный пиксель и его цвет будет назначен всему квадрату. Кроме того, требуется создавать аналогичный по размеру битмап. Хорошо подходит для случая, когда начальная картинка содержится в мувиклипе. 2. Начальное изображение сперва уменьшаем, записываем в битмап, затем снова увеличиваем. Требуется временный битмап для трансформаций, но на порядок меньшего размера. Хорошо подходит для случая, когда картинка изначально содержится в битмапе. Примеры. Подготовительный этап (одинаковый для обоих) Код:
import flash.display.*;Код:
// заполняем карту трансформацииКод:
// создаём временный битмап |
MerlinTwi я попровал ка ты говорил через среднее арифметическое, не то! Цвет уж очень какой то страшно далекий от то что должно быть. Может я не верно считаю среднее арифметическое. То есть я беру сумму цветов и делю на их кол-во
Код:
|
эге, надо ведь покомпонентно смешивать
|
тебе надо посчитать не среднее число цвета, а средние числа его составляющих. тоесть R отдельно G отдельно и B отдельно. а у тя получается ваще фиг знает какое число. явно не то что тебе нужно :)
|
Что-то я не понял, зачем переводишь в строку и обратно? Это же медленно!
Лучше воспользуйся битовыми операциями. Код:
r = 0; |
Цитата:
В массиве ByteArray цвет одной точки сохраняется в 4 байта: прозрачность, красный, зеленый, синий Надо суммировать каждый байт отдельно. Ниже см. пример. А чем не подходит метод с уменьшением и увеличением картинки? Во-первых быстрее, во-вторых меньше кода. Я-то вариант с byteArray привел только как пример использования новых методов AS3 для решения этой задачи (это ведь форум по AS3 ;-) Код:
// размеры картинки |
Я релиазивал первый вариант который привел WindWalker и он работает вполне подходяще и быстро. Спасибо WindWalker!
|
| Часовой пояс GMT +4, время: 06:09. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.