У меня есть объект BitmapData с прозрачностью (параметр sourceBitmapData). Каждый раз, когда я использую copyPixels () для копирования его в другой объект BitmapData, прозрачные пиксели заменяют все, что находится под ними. Я хотел бы, чтобы функция copyPixels () просто игнорировала эти полностью прозрачные пиксели (0x00) и НЕ копировала их.
Есть идеи?
Кстати, я пытался установить для alphaMerge значение true, но это не решает проблему - весь исходный объект просто становится черным и игнорирует ВСЕ прозрачности.
EDIT:
Вот фрагменты кода;
var b:UIComponent = new UIComponent();
b.graphics.beginFill(color, opacity);
b.graphics.drawCircle(size * 2, size * 2, size);
b.graphics.endFill();
shape = new BitmapData(size * 4, size * 4, true, 0x00FFFFFF);
shape.draw(b);
rect = new Rectangle(0, 0, size * 4, size * 4);
shape.applyFilter(shape, rect, new Point(0, 0), new BlurFilter(20, 20) );
Создает графический объект (в данном случае круг) и копирует его в исходное растровое изображение, а затем применяет фильтр размытия.
drawBuffer.copyPixels(shape, rect, pnt, null, null, false);
После этого он применяет полученное изображение несколько раз к drawBuffer. Если для alphaMerge установлено значение true, форма выглядит как черный шарик - кажется, что вся альфа-информация просто игнорируется, а значение альфа установлено в 0xFF (примечание: это мое предположение, основанное на том, как оно выглядит, я не проверял его ). С другой стороны, если для alphaMerge установлено значение false, прозрачность есть все, кроме того, что она перезаписывает все, что находится под ним (пиксели в drawBuffer), в прозрачные пиксели.
На всякий случай, если вам нужен также код для drawBuffer:
drawBuffer = new BitmapData(bitmapData.width, bitmapData.height, true, 0);
drawCanvas.graphics.beginBitmapFill(drawBuffer, null, false, true);
drawCanvas.graphics.drawRect(0, 0, drawBuffer.width, drawBuffer.height);
drawCanvas.graphics.endFill();