Может это еще кому то поможет, но я оставляю эту запись, чтобы потом проще было самому найти при случае ))
Отвратительный баг четвертого креативного пакета на маке (вроде как и пользователи windows тоже жалуются): проект собранный в Adobe Premiere невозможно посчитать в финальный видео файл. AME долго думает, а потом сообщает, что не может найти файлы.
Проблема решается весьма экзотичным методом, корень ее кроется в общих плагинах (Common), которые лежат на маке вот по этому адресу:
Давно хотел написать небольшую статейку по режимам наложения (blend modes), но некий пробел в знании вопроса останавливал меня. Сегодня я наконец узнал, как использовать режимы alpha, layer и erase, поэтому срочно выкладываю всю пачку знаний по вопросу режимы наложения.
Итак. Что это такое? Для тех кто не в курсе – в восьмой версии флеш плеера к обычному наложению клипов по альфа каналу добавилось несколько режимов (как в фотошопе). Говоря проще – режим наложения – это правило: как пиксели верхнего изображения будут накладываться на пиксели нижнего изображения. Что мы имели раньше. Если зеленый квадрат перекрыть красным квадратом – то мы видим красный квадрат. Если последнему задать альфа=50, мы увидим квадрат цвета, напоминающего переспелую оливку на фоне стираного солдатского кителя — это сквозь красный квадрат просвечивет зеленый.
Теперь есть несколько новых правил.
У MovieClip появилось новое свойство – blendMode, достаточно просто присвоить одно из допустимых значений – и результат на лицо (Так же эти режимы можно задавать через Property Inspector в среде разработки). Однако не все так просто. Некоторые режимы очевидны (по крайней мере для тех, кто знаком с photoshop), а некоторые (layer, alpha, erase) весьма загадочны. А разгадка проста – последние три режима имеет смысл использовать только в комплексе. Если вам неитересно знать, как устроены эти режимы – крутите вниз – там есть флешка, где можно все потрогать руками. Если небольшая теоретическая часть вас не пугает – читайте дальше. Глубоко в математику вдаваться не буду, зачастую этого знать и не нужно.
Итак, по порядку. Простые режимы. Для удобства пиксель верхнего изображения обозначим В, нижнего – Н.
normal -как следует из названия – обычный режим наложения. В перекрывает Н.
multiply - математика такая: Каждая составляющая RRGGBB B умножается на соответсвующую составляющую Н, затем нормализуется делением на OxFF (RRB * RRH / OxFF, GGВ * GGН / OxFF, BBB * BBH / OxFF). При этом режиме изображение всегда получается темнее, поэтому используется в основном для затемнений.
screen - Для этого режима берутся инверсные цвета пикселей В и Н, и затем перемножаются. Режим используется для высветления.
lighten - При этом режиме сопоставляются составляющие RRGGBB и выбирается та, значение которой больше. То есть: newR = Math.max(RRB,RRH), newG = Math.max(GGB,GGH), newB = Math.max(BBB,BBH).
darken - обратный предидущему – в результирующий цвет попадают составляющие с меньшим значением.
difference - Из двух составляющих выбирается большая, и из нее вычитается значение меньшей.
add - поканальное сложение, с потолком в OxFF для каждой составляющей.
subtract - Поканальное вычитание H из В, с ограничением до 0, для каждой составляющей.
invert - независимо от цвета В инвертирует цвет Н. Если значение альфа канала пикселя В меньше 0хFF – то результрующий пиксель будет иметь то же значение, соответсвенно накладываться на Н как при обычном альфа наложении.
overlay - Изменяет цвет в зависимости от яркости Н. Если яркость Н больше 50%, к пикселю применяется screen, иначе – multiply.
hardlight- то же, но в основу берется яркость В.
Теперь о комплексных режимах. Все описанные выше режимы, могут применяться к клипу самостоятельно. Все режимы, описанные ниже, должны применятся так – клип с комплексным режимом должен содержаться в клипе, к которому применен режим layer. Фактически, этот режим автоматически применяется к клипу, в котором содержиться более одного клипа, и хотя бы к одному из них применен режим, отличный от normal.
erase- стирает пиксели Н в соответсвии со значением альфа канала В.
alpha- заменяет значение альфа канала Н значением альфа канала В.
Если вас глубоко заинтересовала математика каждого из процессов – почитайте вот эту статью: Blend Modes of Photoshop & Co.
В следующей флешке также можно понаблюдать работу всех режимов. Большая улитка и радужный градиент содержатся в клипе, к которому применен режим layer. Режимы наложения применяются к клипу с улиткой. маленькая улитка лежит сама по себе, к ней также применяются выбранные режимы.
Давно не писал, ибо пребываю сейчас в экстремальном непроходящем дебаге ))
О нем и будет короткая моя речь ))
Недавно вышла новая весрия флеш плеера, о чем было уже писано переписано, все дружно обновились, я полагаю ). В куче мы могли также качать дебаг-версию.
И тут я вспомнил, что FlashTracer – милый плагин под файрФокс, позволяющий выводить трейс из флешек в режиме браузера, перестал откликаться, если я использую 9-ю версию дебаггера.
Как оказалось, такая проблема постигла не только меня. Решение найдено, спасибо Silin-у, подсказал верную мысль )
Дело в том, что я мануально поменял путь к файлу flashlog.txt, вытащив его из длинной цепочки C:\Documents and Settings\user\Application Data\Macromedia\Flash Player\Logs немного поближе.
Так вот флешки, опубликованные под версию плеера НИЖЕ 9-ки спокойно отдавали свои логи в этот файл В ЛЮБОМ дебаг плеере (тут конечно участие принял другой полезный аддон для FF – FlashSwitcher). Зато флешки, требующие как минимум 9-ю версию – тихо сдавали свои логи все по тому же длинному адресу по умолчанию, оставляя указанный мной flashlog.txt без должного внимания. Импичмент, понимаешь.
Так что пришлось смириться с адресом по умолчанию, но зато браузерный дебаг мой снова стал чистым и шелковистым. Вот веть какая штука.
PS. Кажется меня приняли в мксня-аггрегатор. Тут и проверим )) Ответсвенность то какая ))
Самое мое любимое качество – LOW. Очень быстро, но смертельно для вектора.
В некоторых случаях, можно с легкостью пользоваться этим чудным режимом, оставляя за собой право на гладкие линии))
Рецепт прост. Если мы имеем дело со статичным вектором, то мы можем сделать с него слепок в битмапДату при режиме _quality=»HIGH», а затем переключиться на LOW и вывести уже не вектор, а битмапДату. Просто до безобразия.
Более того, замечено, что текст с типом рендеринга ADVANCED – не подвластен козням качества LOW.
ПРи должной сноровке, несложно написать класс, который переводил бы нужный вектор в битмап дату. МОжно даже продумать подобные фокус с анимированными векторами (массив фрейм_в_битмап) Конечно в данном случае больше нагрузки идет на ОЗУ, но в основом именно нагрузка на CPU дает притормаживание.
Пример:
Код фокуса:
import flash.display.BitmapData;
_quality="BEST";
var bmp:BitmapData = new BitmapData(oval._width,oval._height,true,0);
bmp.draw(oval);
_quality = "LOW";
this.createEmptyMovieClip("mc",1);
mc._x = oval._width*2;
mc._y = oval._y;
mc.attachBitmap(bmp,1);
Очередной баг браузерного плагина и как с ним бороться )
Некоторые нехитрые действия для создания битмап-картинки, маскированной фигурным контуром вырубили напрочь браузер.
Коротко об алгоритме:
1.В библиотеке есть клип для маски (дабы прямоугольный кусок растра оформить в «фигурный» контур).
2. Там же, в библотеке, несколько растров с linkageID.
3. Создается временный клип, аттачится маска, временный клип маскируется.
4. Создается временная битмапДата, аттачится во временный клип (Под маско получается картинка «в рамке»)
5. Создаем еще одну битмап дату, делаем слепок с маскированного клипа.
6. Заносим полученную битмапу в массив, для дальнейшего использования.
7. Убираем временные клипы, диспоузим временный битмап.
При этих нехитрых действиях, дебаг, стендалон – работаю как и предполагается.
Браузер (любой) вылетает, сообщив о б ошибке.
Опытным путем, установил, что проблема в маске. И это же навело меня на решение.
Перед тем , как задать маску, нужно и маскируемому, и маскиующему клипам задать свойство cacheAsBitmap = true. И хотя особоенно логичного объяснения я этому не вижу – плагин принимает такой вариант.
Обнаружил баг.
Если свойство multiline текстового поля типа input равно true, то даже если поле пустое, проверка на длину текста показывает 1. В поле сидит паразитный символ с кодом 13 (ввод). При проверке формы на заполненные поля – этот баг играет злую шутку. Визуально поле пустое, но для кода – оно заполнено.
ВАЖНО! Этот баг проявляется, если multiline задано в среде разработки Flash IDE. Программно заданное свойство лишено этого парзитного явления.
______
UPD: По наблюдениям @st@l@vist@ – Важную роль в этом баге играет еще и AutoKern. Если он отключен, то даже при multiline баг не прорявляется.
То есть AutoKern+multiline в поле ввода = баг с длинной текста. Более того, если в поле введен ОДИН символ – длина текста будет равной уже двум. Так что баг ко всему еще имеет и свою логику ).
Если нужно применить к клипу прямоугольную маску, вместо MovieClip.setMask(mc:MovieClip) лучше воспользоваться свойством scrollRect (доступно от 8-й версии и выше).
Плюс в производительности на лицо. Более того – под такой «маской» не пропадают системные и не-внедренные шрифты.
Использование предельно просто:
1
2
3
import flash.geom.Rectangle;
var maskRect:Rectangle = new Rectangle(x,y,width,height);
my_mc.scrollRect = maskRect;
С такой «маской» удобно делать также и скроллеры (собственно название выдает).
Достаточно поменять значение x, y для Rectangle, и визуально мы видим смещение контента мувиКлипа.