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