Flash: объединение двух объектов BitmapData через max (канал) - PullRequest
0 голосов
/ 02 февраля 2010

У меня есть два объекта BitmapData с альфа-каналами. Я хотел бы объединить их в один, используя max (channel_image_one, channel_image_two) для каждого канала, включая альфа Есть ли простой способ достичь этого результата?

Ответы [ 2 ]

2 голосов
/ 03 февраля 2010

Я не думаю, что есть прямой метод растровых данных для объединения альфа-канала таким образом. RGB мог бы сделать это с помощью draw (), применяя режим наложения, но я не думаю, что он сработает, если вам нужен строгий максимум на канал).

Кроме того, вы можете создать шейдер благодаря PixelBender для выполнения этой задачи. Это идеальный инструмент для подобных манипуляций.

Более низкая производительность, но более быстрая настройка, если вы не используете PB, вы можете просто перебирать / сравнивать / записывать пиксели один за другим с BitmapData.getPixel32 () / setPixel32 (). В этом случае подумайте об использовании BitmapData.lock () / unlock () для повышения производительности.

0 голосов
/ 03 февраля 2010

Если вы хотите, чтобы max (image_one, image_two) был эквивалентен режиму смешивания LIGHTEN .

Вот фрагмент из Foundation ActionScript 3.0 Эффекты изображения :

public function lighten(topPixel:uint, bottomPixel:uint):uint{
   return Math.max(topPixel,bottomPixel);
}

Вы можете получить необходимые файлы из папки главы 2 исходного zip .

Воспользуйтесь советом Тео с

  • блокировка ()
  • для петель
  • Разблокировка ()

для скорости с BitmapData или используйте PixelBender. Очевидно, согласно Adobe , более 90% пользователей Flash Player уже используют версию 10.

...