Alex_load — 2016-01-10 17:22:25

Bonjour,
alors je vais essayer d'être claire sur ma demande.
J'ai plusieurs images dans mon data. À l'aide des fleches du clavier et d'une forme carré je dessine une image par dessus une autre, en gros je fais apparaitre une image par dessus une autre image a l'aide de mon carré. Mais le truc c'est que l'image dessiné est pixelisée alors que je ne veux pas parce que ca fait vraiment deguellasse je voudrait que l'image soit tels quel. Voici mon code et j'ai joint mon fichier zip.


int riot = 10;
PImage [] img = new PImage[riot];
color riotCouleur;
int indexriot,dimension,vitesse,x,y,posX,posY;
float vitesseX;
float vitesseY;

void setup(){
  size(1000,1000);
  frameRate(12);
  noStroke();
  for(int i = 0; i < riot; i++){
    img[i] = loadImage("riot_" + i + ".png");
  }
  indexriot = 1;
  image(img[indexriot],0,0);
   
  vitesse = 1;
  posX = posY = 0;
}

void draw(){
  if (keyPressed) {
    if (key == CODED) {
      if (keyCode == RIGHT) {
        x=x+1;
      }
      else if (keyCode == UP) {
        y=y-1;
      }
      else if (keyCode == DOWN) {
        y=y+1;
      }
      else if (keyCode == LEFT) {
        x=x-1;
      }
    }
  }
riotCouleur = img[indexriot].get(x,y); // Récupérerla couleur du pixel sélectionné dans l'image
  fill(riotCouleur); // Le remplissage des formes se fait avec la couleur du pixel sélectionné
   if(frameCount % vitesse == 0) rect(x*50,y*50,50,50);
}

void keyPressed(){
  if(keyCode == BACKSPACE){ // SI la touche enfoncée est l'espace
    image(img[indexriot],0,0);
    posX = posY = 0;
  }
  if(keyCode == 32){ // SI la touche enfoncée est l'espace, prendre l'image suivante dans l'index d'images
    indexriot =  (indexriot < riot-1) ? indexriot = indexriot + 1 : 0;
  }

}


Etant novice j'ai du mal à remplacer se que je veux. Je voudrais en fait remplir la forme avec la couleur de l'image suivante. En esperant avoir était claire :|

Mushussu — 2016-01-10 22:45:03

Bonsoir,

Je n'arrive pas à bien saisir ton idée. Je pense que tu souhaites dessiner une image en mémoire sur une autre avec un pinceau en forme de carré. Si c'est cela, il faut utiliser la méthode copy() comme ceci :

int riot = 2;
PImage [] img = new PImage[riot];
color riotCouleur;
int indexriot, dimension, vitesse, x, y, posX, posY;
float vitesseX;
float vitesseY;

void setup() {
  size(1000, 1000);
  frameRate(12);
  noStroke();
  for (int i = 0; i < riot; i++) {
    img[i] = loadImage("image" + i + ".jpg");
  }
  indexriot = 0;
  image(img[indexriot], 0, 0);

  vitesse = 1;
  posX = posY = 0;
}

void draw() {
  if (frameCount % vitesse == 0) copy(img[indexriot], x, y, 50, 50, x, y, 50, 50);
}

void keyPressed() {
  if (key == CODED) {
    if (keyCode == RIGHT) {
      x=x+5;
    } else if (keyCode == UP) {
      y=y-5;
    } else if (keyCode == DOWN) {
      y=y+5;
    } else if (keyCode == LEFT) {
      x=x-5;
    }
  }
  if (keyCode == BACKSPACE) { // SI la touche enfoncee est l espace
    image(img[indexriot], 0, 0);
    posX = posY = 0;
  }
  if (keyCode == 32) { // SI la touche enfoncee est l espace, prendre l image suivante dans l index d images
    indexriot =  (indexriot < riot-1) ? indexriot = indexriot + 1 : 0;
  }
}
Alex_load — 2016-01-11 00:38:29

Oui :) c'est exactement ça!! Le carré dessine bien une autre image.
J'y suis depuis tellement longtemps que mon cerveau bloque à force! J'ai juste remplacé la valeur 5 par 50 dans keyPressed pour que le déplacement du carré soit le carré. Mais j'aurais une autre question est ce que c'est possible de dire que le premier carré qui dessine l'image soit d'une certaine couleur?

Alex_load — 2016-01-11 00:53:49

Ou qu'il est un contour different pour qu'on le distingue en fait.

Alex_load — 2016-01-11 01:11:56

Pour avoir un contour il me suffit de rajouter stroke et noFill. Mais est ce que c'est possible de le mettre qu'au premier parce la il se dessine sur tout les carrés?


int riot = 2;
PImage [] img = new PImage[riot];
color riotCouleur;
int indexriot, dimension, vitesse, x, y, posX, posY;
float vitesseX;
float vitesseY;

void setup() {
  size(1000, 1000);
  frameRate(12);
  stroke(#000000);
  noFill();
  for (int i = 0; i < riot; i++) {
    img[i] = loadImage("image" + i + ".jpg");
  }
  indexriot = 0;
  image(img[indexriot], 0, 0);

  vitesse = 1;
  posX = posY = 0;
}

void draw() {
  if (frameCount % vitesse == 0) copy(img[indexriot], x, y, 50, 50, x, y, 50, 50);
  rect(x,y,50,50);
}

void keyPressed() {
  if (key == CODED) {
    if (keyCode == RIGHT) {
      x=x+50;
    } else if (keyCode == UP) {
      y=y-50;
    } else if (keyCode == DOWN) {
      y=y+50;
    } else if (keyCode == LEFT) {
      x=x-50;
    }
  }
  if (keyCode == BACKSPACE) { // SI la touche enfoncee est l espace
    image(img[indexriot], 0, 0);
    posX = posY = 0;
  }
  if (keyCode == 32) { // SI la touche enfoncee est l espace, prendre l image suivante dans l index d images
    indexriot =  (indexriot < riot-1) ? indexriot = indexriot + 1 : 0;
  }
}

Mushussu — 2016-01-11 10:56:24

Bonjour,

Comme tu utilises un élément mouvant, il est nécessaire de redessiner le rendu à chaque fois. L'astuce est de stocker l'indice d'images de chaque carré dans un tableau.

int nombreImages = 3;
PImage[] img = new PImage[nombreImages];
color riotCouleur;
int indexriot, dimension, vitesse, x, y, posX, posY;
float vitesseX;
float vitesseY;
int tailleCurseur, largeur, hauteur;
int[][] tableau;

void setup() {
  size(600, 600);
  frameRate(12);
  strokeWeight(4);
  stroke(#000000);
  for (int i = 0; i < nombreImages; i++) {
    img[i] = loadImage("image" + i + ".jpg");
  }
  indexriot = 0;
  tailleCurseur = 50;
  largeur = width / tailleCurseur;
  hauteur = height / tailleCurseur;
  tableau = new int[largeur][hauteur];
  for (int i = 0; i < largeur; i++) {
    for (int j = 0; j < hauteur; j++) {
      tableau[i][j] = 0;
    }
  }
  noFill();
  vitesse = 1;
  posX = posY = 0;
}

void draw() {
  background(255);
  for (int i = 0; i < largeur; i++) {
    for (int j = 0; j < hauteur; j++) {
      copy(img[tableau[i][j]], i * tailleCurseur, j * tailleCurseur, tailleCurseur, tailleCurseur, i * tailleCurseur, j * tailleCurseur, tailleCurseur, tailleCurseur);
    }
  }
  rect(x * tailleCurseur, y * tailleCurseur, tailleCurseur, tailleCurseur);
}

void keyPressed() {
  if (key == CODED) {
    if (keyCode == RIGHT) {
      if (x < largeur - 1) x++;
    } else if (keyCode == UP) {
      if (y > 0) y--;
    } else if (keyCode == DOWN) {
      if (y < hauteur - 1) y++;
    } else if (keyCode == LEFT) {
      if (x > 0) x--;
    }
  }
  if (keyCode == BACKSPACE) { // SI la touche enfoncee est l espace
    indexriot = 0;
    for (int i = 0; i < largeur; i++) {
      for (int j = 0; j < hauteur; j++) {
        tableau[i][j] = indexriot;
      }
    }
    x = y = 0;
  }
  if (keyCode == 32) { // SI la touche enfoncee est l espace, prendre l image suivante dans l index d images
    indexriot =  (indexriot < nombreImages-1) ? indexriot = indexriot + 1 : 0;
  }
  tableau[x][y] = indexriot;
}