Если вы просто хотите плавно переходить между изображениями, это может быть с tint (), как вы предлагаете в коде. Вы были на самом деле довольно близко:
PImage sand;
PImage fossil;
void setup()
{
size(400, 400);
fossil = loadImage("CellNoise.jpg");
sand = loadImage("CellVoronoi.jpg");
}
void draw()
{
//tint from 255 to 0 for the top image
tint(255,map(mouseX,0,width,255,0));
image(fossil, 0, 0, width, height);
//tint from 0 to 255 for the bottom image - 'cross fade'
tint(255,map(mouseX,0,width,0,255));
image(sand, 0, 0, width, height);
}
Для эрозии "аэрозольного баллона" вы можете просто скопировать пиксели из исходного изображения в конечное изображение. От вас зависит, как вы будете проходить по пикселям (сколько, в каком порядке и т. Д.), Чтобы получить нужный эффект «распыления», но вот базовый пример того, как использовать функцию copy () :
PImage sand,fossil;
int side = 40;//size of square 'brush'
void setup()
{
size(400, 400);
fossil = loadImage("CellNoise.jpg");
sand = loadImage("CellVoronoi.jpg");
}
void draw()
{
image(fossil, 0, 0, 400, 400);
if(mousePressed) {
for(int y = 0 ; y < side ; y++){
for(int x = 0; x < side; x++){
//copy pixel from 'bottom' image to the top one
//map sketch dimensions to sand/fossil an dimensions to copy from/to right coords
int srcX = (int)map(mouseX+x,0,width+side,0,sand.width);
int srcY = (int)map(mouseY+y,0,height+side,0,sand.height);
int dstX = (int)map(mouseX+x,0,width+side,0,fossil.width);
int dstY = (int)map(mouseY+y,0,height+side,0,fossil.height);
fossil.set(dstX, dstY, sand.get(srcX,srcY));
}
}
}
}
Обратите внимание, что я просто зацикливаюсь, чтобы скопировать квадрат (40x40 в моем случае), но вы можете найти другие забавные способы зацикливания и получения различных эффектов.
Веселись!