Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2015-12-03 16:44:45 Mapping + Slitscan

Mr Moule
nouveau membre
Date d'inscription: 2015-12-03
Messages: 6

Mapping + Slitscan



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

 

#2 2015-12-03 20:59:45 Re : Mapping + Slitscan

Olivier
N°4
Lieu: Chalon sur la Saône
Date d'inscription: 2009-04-07
Messages: 1471
Site web

Re: Mapping + Slitscan



Hello et bienvenu... smile

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. smilesmile


L'Amour au Peuple !

Hors ligne

 

#3 2015-12-04 11:38:50 Re : Mapping + Slitscan

Mr Moule
nouveau membre
Date d'inscription: 2015-12-03
Messages: 6

Re: Mapping + Slitscan



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 smile

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 wink

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2022