Следуя ответу, который я дал здесь: AS 3 | Клонирование данных изображения Png
Я знал, что для получения прозрачного объекта BitmapData необходимо указать черный цвет фона, но до тех пор, пока меня не вызвали, я никогда не удосужился выяснить, почему. Проверив, мне интересно, есть ли причина, по которой я не вижу противоречивых аргументов по умолчанию для конструктора BitmapData?
Во-первых, вот конструктор, определенный в документации:
public function BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)
Обратите внимание, что значение прозрачности по умолчанию истинно. Теперь посмотрим, что говорят документы о прозрачном параметре:
transparent: Boolean (default = true) - Указывает, поддерживает ли растровое изображение попиксельную прозрачность. Значение по умолчанию - истина (прозрачный). Чтобы создать полностью прозрачное растровое изображение, установите для параметра transparent значение true, а значение параметра fillColor - на 0x00000000 (или на 0). Установка для свойства transparent значение false может привести к незначительным улучшениям в производительности отрисовки.
Кажется, что этот параметр бесполезен, если вы не установите цвет заливки на черный. Так почему же тогда значение fillColor по умолчанию 0xFFFFFFFF?
Мне это кажется неправильным. Если разработчик хочет получить прирост производительности без альфа-канала, это должно быть явно указано:
var bmd:BitmapData = new BitmapData(width,height,false);
И если требуется прозрачный BitmapData, он тоже должен быть явно указан:
var bmd:BitmapData = new BitmapData(width,height,true,0x000000);
Поэтому мы ни в коем случае не можем полагаться на самую короткую форму конструктора, не допуская снижения производительности, и я не могу понять почему. Конечно, либо fillColor по умолчанию должен быть черным:
var bmd:BitmapData = new BitmapData(width,height); // transparent BitmapData
или прозрачность по умолчанию должна быть false:
var bmd:BitmapData = new BitmapData(width,height); // faster, no-alpha BitmapData
Может ли кто-нибудь объяснить мне, в чем преимущество текущего конструктора?