Bonjour à tous,
J'en appelle à vos savoirs car je bloque sur un problème de code (je suis débutante ++ et malgré mes nombreuses recherches, je ne trouve rien). Je cherche à créer un programme qui permettrait à une image de s'effacer progressivement (par fragment) pour en laisser apparaître une autre et ainsi de suite. Mon problème est que la seule méthode que j'ai pu trouver pour le moment est de rendre transparente l'image (en entière), hors je voudrais qu'elle disparaisse par fragments progressifs et non par transparence.
Pour l'instant, la seule solution que j'ai trouvé est d'employé l'outil pointillize pour faire apparaître une image par dessus ma première image de fond. Dans l'idée ca fonctionne pas trop mal, mais j'aimerais que l'une se dégrade pendant que l'autre apparaît... Est-ce que vous auriez une petite solution pour moi ? Je vous copie le bout de code que j'emploie pour l'instant:
int pointillize = 5;
void setup() {
size(500,330);
img2 = loadImage("velo1.jpg");
image(img2,0,0,500,400);
img = loadImage("velo2.jpg");
smooth();
}
void draw() {
// Pick a random point
int x = int(random(img.width));
int y = int(random(img.height));
int loc = x + y*img.width;
// Look up the RGB color in the source image
loadPixels();
float r = red(img.pixels[loc]);
float g = green(img.pixels[loc]);
float b = blue(img.pixels[loc]);
noStroke();
// Draw an ellipse at that location with that color
fill(r,g,b,100);
ellipse(x,y,pointillize,pointillize);
}
Je vous remercie pour votre aide !
Hors ligne
Je me suis chauffé puisque moi aussi je commence processing depuis pas longtemps.
En fait, je parcours aléatoirement une image pixel par pixel, et je dessine des carre de 1 pixel (correspondant aux pixels) par dessus la première qui est déjà affichée.
il doit y avoir moyen de travailler sur les pixels de l'image directement au lieu d'afficher des carre, mais j'ai pas trop cherché à vrai dire
Dis moi si ça te vas comme ça ?
j'ai aussi mis une variable pointsize pour faire du pointillisme
++++++++++++++++++++++++++++++++++++++++++++++
citation :
PImage img1;
PImage img2;
boolean[] pixelTab;
int pixelIndex = 0;
int x = 0;
int y = 0;
int k = 0;
boolean process = true;
// A changer pour faire du pointillisme
int pointsize = 1;
void setup() {
size(600,400);
frameRate(60);
// charge les image en memoire
img1 = loadImage("velo2.jpg");
img2 = loadImage("velo1.jpg");
img2.loadPixels();
// affiche la premiere image
image(img1,0,0);
// pas de bord pour les rectangles
noStroke();
// initialise un tableau de pixel
pixelTab = new boolean[img2.width * img2.height];
for (int i = 0; i < pixelTab.length; i++)
{
pixelTab[i] = false;
}
}
void draw()
{
if(process)
{
for(int i = 0; i < 500; i++)
{
// evite de reparcourir les pixels déjà affichés
do
{
x = int(random(img2.width));
y = int(random(img2.height));
pixelIndex = x + y * img2.width;
}
while(pixelTab[pixelIndex]);
// puis un point de couleur
color c = img2.get(x, y);
fill(c);
rect(x,y,pointsize,pointsize);
pixelTab[pixelIndex] = true;
k++;
if(k == pixelTab.length)
{
println("termine : " + k);
process = false;
break;
}
}
}
}
Dernière modification par thoskan (2016-04-17 19:30:13)
Hors ligne
Super merci beaucoup ! Ca se rapproche beaucoup plus du résultat que je cherche à obtenir.
Je vais essayer de le poursuivre pour faire une suite d'images. Encore merci !
Hors ligne
je sais pas si t'as vu , j'ai mis à jour le code.
j'ai viré les fonctions point() et je les ai remplacé par rect(), ça marche mieux.
j'ai la bizarre impression que point() ne recouvrait pas totalement le pixel de l'image. étrange .. m'enfin !
heureux que ça te plaise.
Dernière modification par thoskan (2016-04-17 19:44:13)
Hors ligne
J'ai mis une version avec processingjs en ligne, si jamais t'as besoin de montrer ton travail via internet.
C'est dispo ici :
http://kwakers.free.fr/processingjs/randompixels/
Dernière modification par thoskan (2016-04-18 11:32:16)
Hors ligne
Pages: 1