Кажется, по умолчанию конструктор BitmapData конфликтует - PullRequest
1 голос
/ 08 августа 2011

Исходя из ответа, который я дал здесь: AS 3 | Клонирование Png данных изображения

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

Во-первых, вот конструктор, определенный в документации:

public function BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)

Обратите внимание, что значение по умолчанию для прозрачности - true. Теперь посмотрим, что в документах говорится о прозрачном параметре:

transparent: Boolean (по умолчанию = true) - указывает, поддерживает ли растровое изображение прозрачность для каждого пикселя. Значением по умолчанию является true (прозрачный). Чтобы создать полностью прозрачное растровое изображение, задайте для параметра прозрачного параметра значение 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

или прозрачность должна по умолчанию ложь:

var bmd:BitmapData = new BitmapData(width,height); // faster, no-alpha BitmapData

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

1 Ответ

0 голосов
/ 09 августа 2011

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

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

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