segunda-feira, 22 de junho de 2015

Atividade 20

- criar uma aplicação que realiza crossfade entre três imagens distintas de acordo com a posição vertical do mouse

código:




Primeiro declara-se as variáveis das imagens que serão utilizadas, as variáveis das cores e de posição.
PImage imgOriginal;
PImage imgOriginal1;
PImage imgOriginal2;
float r,g,b,r1, g1, b1;
float a;
int pos;

no setup(), estabelece-se o tamanho da tela e carrega-se as 3 imagens que serão utilizadas nas variáveis criadas anteriormente.
void setup(){
size(320,240);
imgOriginal = loadImage("walter.jpg");
imgOriginal1 = loadImage("cook.jpg");
imgOriginal2 = loadImage("heisenberg.jpg");
}

na função draw()
se utiliza a função loadPixels(); para carregar e verificar os pixels da imagem
para fazer o crossfade atribui-se que o todo é 1, então o inicio da imagem é a posição da imagem dividido pela altura da tela.
e o inicio da outra é o todo subtraído pela primera imagem.
void draw(){
  loadPixels(); 
    a = mouseY/239.0;
    b = 1-(mouseY/239.0);
    println(a,b);    



depois cria-se uma condicional para verificar, se a imagem estiver entre 0 e 0.5 (metade do todo), ele faz o crossfade das duas primeiras imagens

se ela estiver entre 0.5 e 1 (outra metade do todo), ele faz o crossfade da segunda imagem com a terceira,
for (int x=0; x<320;x++){
    for(int y=0; y<240;y++){
      pos = y*320+x;
      
      if(a >= 0 && a <= 0.5){
      r= (2*a)*red(imgOriginal.pixels[pos]) + (1 - (2*a))*red(imgOriginal1.pixels[pos]);
      g= (2*a)*green(imgOriginal.pixels[pos]) + (1 -(2*a))*green(imgOriginal1.pixels[pos]);
      b=(2*a)*blue(imgOriginal.pixels[pos]) + (1 -(2*a))*blue(imgOriginal1.pixels[pos]);
      pixels[pos] = color(r,g,b);
      }
      if(a > 0.5 && a <= 1){      
      r1= (1-(2*b))*red(imgOriginal2.pixels[pos]) + (2*b)*red(imgOriginal.pixels[pos]);
      g1= (1 -(2*b))*green(imgOriginal2.pixels[pos]) +(2*b)*green(imgOriginal.pixels[pos]);
      b1= (1 -(2*b))*blue(imgOriginal2.pixels[pos]) + (2*b)*blue(imgOriginal.pixels[pos]);
      pixels[pos] = color(r1,g1,b1);
      }      
    }
  }



depois utiliza-se a função updatePixels para atualizar a tela.
  updatePixels();
  
}



Resultado:



Nenhum comentário:

Postar um comentário