2012-10-19 2 views
0

Позвольте мне объяснить, чего я пытаюсь достичь. Я хочу создать своего рода «возрастную карту» изображения. Это означает, что каждый кадрПриращение каждого пикселя в BitmapData

  • значение каждого пикселя увеличивается на 1.
  • модифицированных пикселов установлены на 0.

Есть ли способ сделать это эффективно без пробегаю по всем пикселям и вызова getPixel/setPixel?

Для сброса измененных пикселей я думаю об использовании bitmapData.draw() с комбинацией blendModes/colorTransform; например нарисуйте форму по возрастной карте, используя форму цвета 0, сохраняя форму, но делая форму черной, то есть 0x000000.

Однако приращение каждого пикселя на 1 может быть более сложным. Я мог бы создать изображение со всеми значениями 0x000001 и использовать .draw(), чтобы добавить его в каждый фрейм, но используя BlendMode.ADD клипы каждого канала в 0xFF, что позволяет использовать только 255 разных возрастных значений.

Любые предложения по эффективному обходу? Могу ли я применить ColorTransform или ColorMatrixFilter ко всему изображению?

ответ

1

Написать пользовательский PixelBender фильтр, это будет намного быстрее, чем итерация пикселей:

Это может быть полезен, если вы никогда ранее не использовались:

http://tv.adobe.com/watch/adc-presents/pixel-bender-custom-filters/

I Я немного ржав с PB, извините, я не могу предложить более конкретные советы, но знаю, что это возможно, и поддержка GPU означает, что он будет достаточно быстрым, чтобы его можно было использовать.

+0

Спасибо за ответ. Дело в том, что я использую Haxe; поэтому поддержка PixelBender несколько сомнительна. В итоге я использовал только синий канал, применяя ColorTransform, который имеет 'blueOffset = 1' каждого кадра. Это ограничивает меня до 255 значений. – noio

Смежные вопросы