Если вы нацелены на FP10, и вы хотите простой фильтр, подобный тому, который вы пробовали с ColorTransform, вы можете написать ядро PixelBlender, которое будет принимать 2 аргумента цветов (один для источника, другой для пункта назначения), сопоставьте пиксель с исходный цвет и поменяйте их местами назначения; как то так:
//I release this under the MIT License. Use it to your heart's content.
<languageVersion : 1.0;>
kernel ReplaceColor
< namespace : "PIPEEP";
vendor : "PiPeep";
version : 1;
description : "Replace color";
>
{
input image4 src;
output pixel4 dst;
parameter pixel4 sColor
<
minValue:pixel4(0.);
maxValue:pixel4(255.);
>;
parameter pixel4 dColor;
parameter float tolerance;
void
evaluatePixel()
{
dst = sampleNearest(src,outCoord());
pixel4 sColorAdjusted = abs((sColor/pixel4(255.)) - dst);
if(sColorAdjusted.r < tolerance && sColorAdjusted.g < tolerance && sColorAdjusted.b < tolerance && sColorAdjusted.a < tolerance) {
dst = dColor;
}
}
}
Помнит, почему он ненавидит PixelBlender IDE
РЕДАКТИРОВАТЬ: Помните, что это не будет хорошо работать с сглаживанием, но если вы используете stage.quality = "low", это не будет иметь значения.
Чтобы добавить, используйте его в as3, попробуйте это (украдено из http://scriptplayground.com/tutorials/as/Flash-CS4-and-Pixel-Bender-Overview/,, поэтому вам потребуется изменить несколько строк кода):
Первая часть кода определяет некоторые переменные, которые будут использоваться позже. Только два
что может выглядеть новым Шейдером и
ShaderFilter. Это новые для Flash
Игрок 10 и классы
ответственность за обработку пикселей
Данные фильтра Бендера.
var loader:URLLoader;
var shader:Shader;
var shaderFilter:ShaderFilter;
var image:MovieClip;
var timer:Timer;
var timerInt:uint = 40;
Следующим шагом в коде является загрузка
изображение на сцену, которое вы добавили
в предыдущих шагах.
image = new SampleImage(); image.y =
20; image.x = 25;
addChild(image);
Первые два метода, которые будут созданы
предназначены для загрузки файла pbj и
инициализация создания фильтра
процесс
function startEffect() { loader = new
URLLoader(); loader.dataFormat =
URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE,
loadComplete); loader.load(new
URLRequest("sample.pbj")); }
function loadComplete(e:Event):void {
shader = new Shader(loader.data);
initFilter(); }
Следующая функция initFilter()
вызывается, как только файл pbj
успешно загружен, поэтому фильтр может
быть создан. Этот фильтр устанавливает r, g,
б значения цвета изображения, которые
по существу дует деталь из
образ. "shader.data.red.value
" для
пример ссылается на пиксель
Бендер код, который был написан на
начало, если вы заметили, что код имеет
«параметр с плавающей точкой красного», который является
переменная с плавающей точкой, чтобы установить уровень
красный. В этом случае значение
установить на 20. Этот процесс повторяется
для других 2 цветов, а затем
передается образу экземпляра.
Последняя часть этой функции настраивается
таймер, который будет работать, чтобы применить это
фильтруйте, пока изображение не вернется к
нормальный вид
function initFilter() {
shader.data.red.value = [20];
shader.data.green.value = [20];
shader.data.blue.value = [20];
shaderFilter = new
ShaderFilter(shader); image.filters =
[shaderFilter];
timer = new Timer(timerInt, 0);
timer.addEventListener(TimerEvent.TIMER,
timerHit); timer.start(); }
Последняя функция повторяет процесс
применения фильтра, но сначала
захватывает текущие значения фильтра и
вычитает 0,1 от значения на каждом
проходить. Этот процесс медленно удаляет
Интенсивность фильтра от изображения до
это полностью ушло. Это timerHit()
функция вызывается из таймера, который
был создан в initFilter()
функция.
function timerHit(e:TimerEvent):void
{
if(shader.data.red.value == 1)
{
timer.stop();
return;
}
var r:uint = shader.data.red.value - 0.1;
var g:uint = shader.data.green.value - 0.1;
var b:uint = shader.data.blue.value - 0.1;
shader.data.red.value = [r];
shader.data.green.value = [g];
shader.data.blue.value = [b];
shaderFilter = new ShaderFilter(shader);
image.filters = [shaderFilter];
}
Последний шаг в коде - запуск
процесс, который в этом приложении
делается по телефону startEffect()
функция, так что это то, что мы будем делать
startEffect();
Извините за кровоточивость глаз! Я думаю, что это мой самый длинный ответ!