Bonjour à tous.
Petit nouveau ici et dans processing, il y a certaine choses qui m'échappent quelque peu.
J'ai deux codes que j'aimerais mêler entre eux, seulement je ne comprends pas comment appliquer l'un à l'autre.
Ici, j'aimerais donc mélanger un Slitscan et un color mapping reproduisant l'effet d'une caméra thermique.
Merci du coup de main, ci-dessous c'est ce que j'ai essayé mais sans succès, on y voit seulement le slitscan sans le mapping couleur.
import processing.video.*;
Capture video;
int videoSliceX;
int drawPositionX;
void setup() {
size(600, 240);
video = new Capture(this,320, 240);
video.start();
videoSliceX = video.width / 2;
drawPositionX = width - 1;
background(0);
}
void draw() {
if (video.available()) {
video.read();
video.loadPixels();
loadPixels();
for (int y = 0; y < video.height; y++){
int setPixelIndex = y*width + drawPositionX;
int getPixelIndex = y*video.width + videoSliceX;
pixels[setPixelIndex] = video.pixels[getPixelIndex];
color sourceColor = video.pixels[y];
int br = int(brightness(sourceColor));
int r = br>160 ? (br-160)*7 :0; // rouge
int g = br>224 ? 255 : br > 192 ? 0 : br > 128 ? br*2-128 : 0; // vert
int b = br<128 ? br<104 ? br*2 : 255 : 0; // bleu
color destinationColor = color(r,g,b);
pixels[y] = destinationColor;
}
updatePixels();
drawPositionX--;
if (drawPositionX < 0) {
drawPositionX = width - 1;
}
}
}
Hors ligne
Hello et bienvenu...
Il y a deux choses qui ne collent pas...
La première, c'est que tu dessines le slitscan avant d'appliquer les changements de couleur...
C'est la ligne (qui est donc mal placée) :
pixels[setPixelIndex] = video.pixels[getPixelIndex];
La deuxième c'est que les changements de couleur ne sont pas effectués sur les mêmes pixels que ceux qui sont utilisés pour être affichés...
Ce sont les lignes :
color sourceColor = video.pixels[y];
Et :
pixels[y] = destinationColor;
Ce sont les seuls choses à changer pour obtenir le résultat que tu souhaites...
Je te laisses essayer par toi-même.
Si tu ne trouves pas reviens nous voir...
... et si tu trouves, reviens-nous voir aussi pour poster ta solution.
Hors ligne
Bonjour Olivier !
Tout d'abord, merci du coup de main, grace à toi j'ai reussi à faire ce que je voulais, alors c'est parfait.
Du coup, voici la "solution" comme tu dis :
import processing.video.*; Capture video; int videoSliceX; int drawPositionX; void setup() { size(600, 240); video = new Capture(this,320, 240); video.start(); videoSliceX = video.width/2; drawPositionX = width - 1; background(0); } void draw() { if (video.available()) { video.read(); video.loadPixels(); loadPixels(); for (int y = 0; y < video.height; y++){ int setPixelIndex = y*width + drawPositionX; int getPixelIndex = y*video.width + videoSliceX; color sourceColor = video.pixels[getPixelIndex]; int br = int(brightness(sourceColor)); int r = br>160 ? (br-160)*7 :0; // rouge int g = br>224 ? 255 : br > 192 ? 0 : br > 128 ? br*2-128 : 0; // vert int b = br<128 ? br<104 ? br*2 : 255 : 0; // bleu color destinationColor = color(r,g,b); video.pixels[getPixelIndex] = destinationColor; pixels[setPixelIndex] = video.pixels[getPixelIndex]; } updatePixels(); drawPositionX--; if (drawPositionX < 0) { drawPositionX = width - 1; } } }
Cela fonctionne parfaitement, maintenant je n'ai plus qu'à régler la taille et ce sera niquel chrome comme on dit. Merci beaucoup
Fun Fact : j'étais à l'ESAD d'Orléans l'an dernier encore, en Master. On connait bien Labomédia, et vice versa je pense. Le monde est petit
Hors ligne