Похоже, что конструктор BitmapData по умолчанию конфликтует

Следуя ответу, который я дал здесь: 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

Может ли кто-нибудь объяснить мне, в чем преимущество текущего конструктора?


person shanethehat    schedule 08.08.2011    source источник


Ответы (1)


Текущий конструктор не дает никаких преимуществ - это просто режим Adobe по умолчанию - я предполагаю, что они не хотели, чтобы люди жаловались на то, что при рисовании экранных объектов, видеоклипов и т. Д. Растровое изображение содержит фон. Честно говоря, я думаю, что было бы разумнее не делать никаких значений по умолчанию, но это именно то, что они выбрали, и мы должны его соблюдать.

Если вы действительно хотите незначительного увеличения скорости и не хотите указывать этот конструктор, создайте последний подкласс с определенным ctor:

public final class Surface extends BitmapData {
    public function Surface(width:int, height:int, fillColor:uint = 0x000000):void {
        super(width, height, false, fillColor);
    }    
}
person ansiart    schedule 08.08.2011