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
Dernière modification par Alex_load (2016-01-10 20:19:05)
Hors ligne
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; } }
Hors ligne
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?
Hors ligne
Ou qu'il est un contour different pour qu'on le distingue en fait.
Hors ligne
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;
}
}
Hors ligne
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; }
Hors ligne
Pages: 1