Si se dirige al FP10 y desea un filtro simple como el que probó con ColorTransform, podría escribir un Kernel de PixelBlender para tomar 2 argumentos de colores (uno para el origen, uno para el destino), unir el píxel con el color de la fuente, y cambiarlos por el destino; algo como esto:
//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;
}
}
}
recuerda por qué odia el IDE PixelBlender
EDIT: Recuerda que esto no va a jugar bien con anti-aliasing, pero si está utilizando Stage.quality = " bajo ", no importará.
Para añadir uso en AS3, intente esto (robado de http://scriptplayground.com/tutorials/as/Flash-CS4-and-Pixel-Bender-Overview/, por lo que tendrá que cambiar algunas líneas de código):
La primera parte del código se define algunas variables que se utilizará mas tarde. Los únicos dos que pueden parecer nuevos son Shader y ShaderFilter. Estos son los nuevos en Flash Player 10 y son las clases responsables del manejo de los datos del filtro Bender Pixel .
var loader:URLLoader;
var shader:Shader;
var shaderFilter:ShaderFilter;
var image:MovieClip;
var timer:Timer;
var timerInt:uint = 40;
El siguiente paso en el código es cargar la imagen en el escenario, que agregó en los pasos anteriores.
image = new SampleImage(); image.y =
20; image.x = 25;
addChild(image);
Los primeros dos métodos para crear sirven para cargar el archivo PBJ y inicializar la creación de filtros proceso
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(); }
La siguiente función initFilter()
se llama una vez que el archivo de PBJ es éxito cargado, para que se pueda crear el filtro . Este filtro establece los valores de color r, g, b de la imagen, que esencialmente muestra el detalle de la imagen . El "shader.data.red.value
" para ejemplo hace referencia a un código de Pixel Bender que fue escrito en el principio, si se nota que tiene código un "parámetro de flotador rojo", que es una variable flotador para ajustar el nivel de rojo. En este caso, el valor es establecido en 20. Este proceso se repite para los otros 2 colores, y luego es pasado a la instancia de la imagen.
La última parte de esta función configura el temporizador que se ejecutará para aplicar este filtro hasta que la imagen vuelve a su aspecto normal de
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(); }
La función final se repite el proceso de aplicar el filtro , pero primero toma los valores de filtro actuales y resta 0.1 del valor en cada pase . Este proceso elimina lentamente la intensidad del filtro de la imagen hasta que se haya ido por completo. Esta función timerHit()
se invoca desde el temporizador que se creó en la función 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];
}
El último paso en el código es comenzar el proceso, que en esta solicitud se hace llamando a la función startEffect()
, así que es lo que vamos a hacer
startEffect();
¡Perdón por hacer sangrar tus ojos! ¡Creo que es mi respuesta más larga hasta ahora!
sí, ya he encontrado la primera solución, gracias;) – Dungeo