Я работаю в игре.AS3: Как эффективно получить доступ к данным пикселя?
Игра требует, чтобы компании анализировать изображение и направиться пикселями со специальными свойствами (высоким красным каналом и т.д.)
Я смотрел в Pixel Bender, но это только кажется полезным для написания новых цветов к образ. В настоящий момент даже при низком разрешении (200x200) только один объект сканирования изображения замедляется до 1-2 кадров в секунду.
Я внедряю изображение и представляю его как растровое изображение в качестве ребенка сцены. В ситуации 1-2 FPS используется BitmapData.getPixel() (на каждом пикселе) с предварительным расчетом.
Мне интересно, могу ли я сделать это более эффективно ... Моя первая мысль была своего рода пространственным разделением в сочетании с разбиением изображения на многие более мелкие части.
Я также чувствую, что Pixel Bender должен как-то помочь, однако у меня мало опыта с ним.
Приветствия за любую помощь. Jonathan
Извините, но это неправильно. Количество итераций одинаково в обоих случаях, если то, что вы пытаетесь сделать, это оценить * каждый * пиксель. Являются ли петли вложенными или нет, это не изменяет этот факт. Помещение пикселов в ByteArray не принесет вам ничего в этом сценарии. На самом деле это хуже: вы будете использовать (по крайней мере) вдвое больше памяти; вы избежите вызова getPixel(), но в конечном итоге вы вызове readUnsignedInt() столько же раз; если вам нужно знать пиксельные шнуры (вполне вероятно), вы в конечном итоге добавите счетчики для x и y или с помощью модуля. Во всяком случае, здесь нет никакой выгоды. –
Использование getPixels(), безусловно, предпочтительнее getPixel(). Накладные расходы любого вызова метода во Flash огромны, и поскольку вы можете получить доступ к ByteArray, например массиву, например myPixels [index], вы сэкономите накладные расходы на вызов метода для каждого пикселя. Кроме того, флеш внутренне выполняет проверку границ для getPixel(), что является еще одним замедлением. – Quasimondo
@Quasimondo. Вы более осведомлены, чем меня относительно манипуляции с картинками (я следую вашему блогу!). Тем не менее, я не уверен, что getPixels лучше, чем getPixels в данных обстоятельствах (т. Е. Если вы хотите что-то делать с каждым пикселем). Вызов функции, безусловно, накладные расходы, но IIRC, Nicolas Canasse продемонстрировал, что доступ к массиву также довольно медленный (не уверен, что это изменилось у самых новых игроков). –