Comunidad de diseño web y desarrollo en internet online

problema usando colorTransform

Citar            
MensajeEscrito el 15 Dic 2012 08:13 pm
Buenas tardes. Estoy trabajando con un archivo de flash que lo que hace cada 4 segundos es llevarse el dato de color de uno de los pixeles de lo que está siendo capturado por la webcam y pasarselo a un movieclip que tomará dicho color.

Lo pude conseguir, pero ahora estoy tratando de hacrlo mediante una transicion para que el cambio no sea tan brusco lo cual me está trayendo complicaciones.

Código :

import fl.transitions.*;
import fl.transitions.easing.*;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.*;
import flash.display.Shape;
import flash.events.Event;

import VariableGlobal;
VariableGlobal.vars.root = this;

const WIDTH:Number = 600;
const HEIGHT:Number = 450;
var cam:Camera;
var vid:Video;

cam = Camera.getCamera();
         cam.setMode(WIDTH,HEIGHT,15);
         vid = new Video(WIDTH,HEIGHT);
         
         if (cam!=null){ //Si cam no es null (que está funcando)
         vid.attachCamera(cam);
         }else{
            trace("FAVOR DE CONECTAR SU WEBCAM Y SETEARLA");
         }
         vid.filters = [new BlurFilter(10,10,1)];
         var videoContainer:Sprite= new Sprite();
         videoContainer.x= 0;
         videoContainer.y= 0;
         videoContainer.addChild(vid);
         /*addChild(videoContainer);*/

var empieza2:Timer = new Timer (4000);
empieza2.addEventListener(TimerEvent.TIMER, dale);
empieza2.start();

function dale(e:TimerEvent):void{ 
   var miColor:ColorTransform=transform.colorTransform;
   if (!VariableGlobal.vars.colorGlobal){
miColor.color=0xFF0000;
}else{
   miColor.color=VariableGlobal.vars.colorGlobal;
}   
clip.transform.colorTransform=miColor;      

   var _stageBitmap:BitmapData;    
   _stageBitmap = new BitmapData(stage.width, stage.height);
   _stageBitmap.draw(vid);

   var pix:uint = _stageBitmap.getPixel(300,300);
trace(pix.toString(16)); // me sirve para entender

var color0x:String = "0x" + pix.toString(16);
VariableGlobal.vars.colorGlobal = color0x;
var color2:uint = uint(color0x);
VariableGlobal.vars.color2 = color2;
trace(color2);
function interpolateColor(start:ColorTransform, end:ColorTransform, t:Number):ColorTransform {
   var result:ColorTransform = new ColorTransform();
   result.redMultiplier = start.redMultiplier + (end.redMultiplier - start.redMultiplier)*t;
   result.greenMultiplier = start.greenMultiplier + (end.greenMultiplier - start.greenMultiplier)*t;
   result.blueMultiplier = start.blueMultiplier + (end.blueMultiplier - start.blueMultiplier)*t;
   result.alphaMultiplier = start.alphaMultiplier + (end.alphaMultiplier - start.alphaMultiplier)*t;
   result.redOffset = start.redOffset + (end.redOffset - start.redOffset)*t;
   result.greenOffset = start.greenOffset + (end.greenOffset - start.greenOffset)*t;
   result.blueOffset = start.blueOffset + (end.blueOffset - start.blueOffset)*t;
   result.alphaOffset = start.alphaOffset + (end.alphaOffset - start.alphaOffset)*t;
   return result;
}

var startColor:ColorTransform = new ColorTransform();  
var endColor:ColorTransform = new ColorTransform();
endColor.color = color2; // end color of red

var tween:Tween = new Tween(clip, "", Strong.easeOut, 0, 1, 50);
tween.addEventListener(TweenEvent.MOTION_CHANGE, tweenTransform);

function tweenTransform(event:TweenEvent):void {
   // use tween position for interpolation of
   // start and end colors (value 0 - 1)
   clip.transform.colorTransform = interpolateColor(startColor, endColor, tween.position);
}
}


Con este codigo lo que me ocurre es que funciona bien excepto que vuelve siempre al color por default del simbolo movieclip que está en el stage cuyo nombre de instancia es 'clip' el cual es azul.. y lo que yo pretendo es que el color de inicio sea el último color adquirido.
¿En qué me estoy equivocando?

Por lio89

18 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Dic 2012 08:41 pm
Defines así startColor

var startColor:ColorTransform = new ColorTransform();

Pero no le das ningún color, a endColor si le das un valor .... haz lo mismo con startColor para que no tome uno por defecto

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 16 Dic 2012 09:06 pm
Lo he hecho, pero me hace la transicion comenzando desde el color NEGRO, cuando el trace me indica que está agarrando el color que corresponde. No entiendo por que.

Código :

import fl.transitions.*;
import fl.transitions.easing.*;

import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.*;

///////// AGREGO CLASES MARA
import flash.display.Shape;
import flash.events.Event;
/////////////


//////////// VARIABLES GLOBALES ////
import VariableGlobal;
VariableGlobal.vars.root = this;



const WIDTH:Number = 600;
const HEIGHT:Number = 450;

var cam:Camera;
var vid:Video;

         cam = Camera.getCamera(); //traer
         cam.setMode(WIDTH,HEIGHT,15);
         vid = new Video(WIDTH,HEIGHT);
         
         if (cam!=null){ //Si cam no es null (que está funcando)
         vid.attachCamera(cam);
         }else{
            trace("FAVOR DE CONECTAR SU WEBCAM Y SETEARLA");
         }
         vid.filters = [new BlurFilter(10,10,1)];

         var videoContainer:Sprite= new Sprite();
//un sprite es como un movieclip   
         videoContainer.x= 0;
         videoContainer.y= 0;
         videoContainer.addChild(vid);
//al sprite le tiro el objeto que tiene el flujo de video 
//(addChild vendria a significar "agregar a la displayList")         
         /*addChild(videoContainer);*/

         
         
   



//trace(MisGlobales.vars.boolean);         
////////////////////////////////////////////////////////////////////////////         
//ACA VAMOS A AGARRAR LA IMAGEN Y A METER EL DATO DE COLOR EN UNA VARIABLE//

var empieza2:Timer = new Timer (4000);
empieza2.addEventListener(TimerEvent.TIMER, dale);
empieza2.start();

function dale(e:TimerEvent):void{ 
//
   var miColor:ColorTransform=transform.colorTransform;
   if (!VariableGlobal.vars.color2){
miColor.color=0xFF0000;
}else{
   miColor.color=VariableGlobal.vars.color2;
}   
clip.transform.colorTransform=miColor;      
   //
   var _stageBitmap:BitmapData;    
   _stageBitmap = new BitmapData(stage.width, stage.height);
   _stageBitmap.draw(vid);

   var pix:uint = _stageBitmap.getPixel(300,300);
trace(pix.toString(16)); // un trace al pedo pero sirve para explicar

var color0x:String = "0x" + pix.toString(16);
//perfecto ahora en color0x tengo el pure dato.
VariableGlobal.vars.colorGlobal = color0x;
var color2:uint = uint(color0x);
VariableGlobal.vars.color2 = color2;
//trace(color2);

// function to transition from one colorTransform to another
function interpolateColor(start:ColorTransform, end:ColorTransform, t:Number):ColorTransform {
   var result:ColorTransform = new ColorTransform();
   result.redMultiplier = start.redMultiplier + (end.redMultiplier - start.redMultiplier)*t;
   result.greenMultiplier = start.greenMultiplier + (end.greenMultiplier - start.greenMultiplier)*t;
   result.blueMultiplier = start.blueMultiplier + (end.blueMultiplier - start.blueMultiplier)*t;
   result.alphaMultiplier = start.alphaMultiplier + (end.alphaMultiplier - start.alphaMultiplier)*t;
   result.redOffset = start.redOffset + (end.redOffset - start.redOffset)*t;
   result.greenOffset = start.greenOffset + (end.greenOffset - start.greenOffset)*t;
   result.blueOffset = start.blueOffset + (end.blueOffset - start.blueOffset)*t;
   result.alphaOffset = start.alphaOffset + (end.alphaOffset - start.alphaOffset)*t;
   return result;
}



// start and end colors for tween
var startColor:ColorTransform = new ColorTransform(); // default color, no tint 
if(!VariableGlobal.vars.valorcolor){
startColor.color = VariableGlobal.vars.color2;
}else{
startColor.color = VariableGlobal.vars.valorcolor;
trace ("inicial seria"+VariableGlobal.vars.valorcolor);
}

var endColor:ColorTransform = new ColorTransform();
endColor.color = VariableGlobal.vars.color2; // end color of red


var tween:Tween = new Tween(clip, "", Strong.easeOut, 0, 1, 50);

tween.addEventListener(TweenEvent.MOTION_CHANGE, tweenTransform);


function tweenTransform(event:TweenEvent):void {
   
   clip.transform.colorTransform = interpolateColor(startColor, endColor, tween.position);
   var valorcolor = clip.transform.colorTransform.color.toString(16);
   VariableGlobal.vars.valorcolor = valorcolor;
   trace("aca "+VariableGlobal.vars.valorcolor);
}
}

Por lio89

18 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Dic 2012 11:32 pm
Estas tomando un flashvars como color, que usualmente requiere de un Number. Mira de pasarlo a Number con base 16 si lo tienes en hexa

startColor.color = parseInt(VariableGlobal.vars.color2, 16);

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 17 Dic 2012 06:04 am
Ha funcionado. Muchisimas gracias solisarg y tambien Jorge, ya que he posteado el tema en varios foros y nadie me ha contestado excepto aquí en Cristalab.

Además, llevaba rompiendome la cabeza durante muchas horas debido a ésto, ya que estoy armando un proyecto para la facultad y necesitaba hacerlo funcionar de esta manera. Gracias a ustedes me he ahorrado el tener quemovilizarme hasta la facultad para consultar con mis profesores.

Realmente que es muy loable que pongan sus conocimientos al alcance del usuario novato.
Totalmente agradecido a ustedes y a Cristalab!! De verdad.
Lionel

Por lio89

18 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Dic 2012 06:06 am
Y perdon por creerlos dos usuarios, cuando eres solamente 1. Es que sin lentes no veo muy bien ! :P
Saludos

Por lio89

18 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.