Annonce

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


#1 2016-05-09 11:56:06 enregistrement et sauvegarde en jpeg

martymarin
nouveau membre
Lieu: Rennes
Date d'inscription: 2016-01-25
Messages: 8
Site web

enregistrement et sauvegarde en jpeg



Bonjour,
J'ai réalisé un projet avec une kinect et processing, où l'utilisateur réalise des mouvements et les tracés s'affichent en direct sur un écran. Ce que je voudrais à présent, c'est pouvoir sauvegarder les tracés et les sortir en fichier image.

Dans mon code, les tracés suivent la main mais ne reste pas à l'écran, ce que j'aimerai enregistré toutes les trajectoires (par exemple pour un temps donnés) Je ne sais pas si je suis très claire. je vous poste mon code en dessous. (ainsi qu'un fichier exemple). Merci beaucoup. Mary

-----

import SimpleOpenNI.*;

SimpleOpenNI  context;

// pour le texte typo consigne
PFont font;
int x=30;
//

PGraphics pg;
PVector lastPointPos;

int currentState= 0;
int numStates = 5; //nb etapes

void setup()
{
  size(640,480);
  frameRate(60); //regler la sensibilité
  context = new SimpleOpenNI(this,SimpleOpenNI.RUN_MODE_MULTI_THREADED);
  if(context.isInit() == false)
  {
     println("Can't init SimpleOpenNI, maybe the camera is not connected!");
     exit();
     return; 
  }
 
  // enable depthMap generation
  context.enableDepth();
   
  // enable skeleton generation for all joints
  context.enableUser();

  background(200,0,0);
 
   stroke(0,0,255); // dessin

  smooth(); 
   
 
  pg = createGraphics(width,height);
    pg.beginDraw();
  pg.background(0,0);
  pg.endDraw();
}


void draw()
{
  background(0);
  context.update();
 
  image(context.userImage(),0,0);
 
 
  image(pg,0,0,width,height); //Afficher l'image directement
  //blend(pg,0,0,width,height,0,0,width,height,ADD); //Fusion avec l'image

 
  processUserDrawing();
  drawState();
}

void processUserDrawing()
{
  int userId = getFirstTrackedUserIndex();
 
if(userId == -1) return;

  PVector leftHandPos = getJointPosition2D(userId,SimpleOpenNI.SKEL_LEFT_HAND);
 
  PVector rightHandPos = getJointPosition2D(userId,SimpleOpenNI.SKEL_RIGHT_HAND); // detecte position de la md dans skeleton
 
  boolean keepDrawing = rightHandPos.y < height /3; //dessin en continue avec main d
 
  pg.beginDraw();
  if(!keepDrawing)
  {
    pg.fill(0,50);
    pg.rect(0,0,pg.width,pg.height);
  }
 
  pg.pushStyle();
 
  if(currentState == 0) pg.stroke(255,255,255); // chgt couleur
  else pg.stroke(255,255,255);
 
  if(lastPointPos == null) lastPointPos = leftHandPos;
  float dist = PVector.dist(lastPointPos,leftHandPos);
//pg.strokeWeight(dist/3f);

pg.strokeWeight(30.0);
pg.strokeCap(ROUND);
pg.fill(255,255,255);
pg.line(lastPointPos.x,lastPointPos.y,leftHandPos.x,leftHandPos.y); //// changer la forme ici du visuel//

  pg.popStyle();
  pg.endDraw();
 
  lastPointPos = leftHandPos;
 
}

void drawState()
{
  pushStyle();
  textSize(20);
  switch(currentState)
  {
    case 0:
   
   // text("",x, 100);
    break;

    case 1:
    text("Placez votre main droite sur votre côté gauche, aller légèrement vers la droite",x , 100);
    textAlign(CENTER);
     //x=x+1;
   break;

     case 2:
   text("ETAPE 3 ",10,10,100,60);
     break;

     case 3:
    text("ETAPE 4 ",10,10,100,60);
   break;

    case 4:
    text("MERCI ",10,10,100,60);
   break;
   
  }
 
  popStyle();
}


int getFirstTrackedUserIndex()
{
  int[] userList = context.getUsers();
  for(int i=0;i<userList.length;i++)
  {
    if(context.isTrackingSkeleton(userList[i]))
    {
      return userList[i];
    }
  }
 
  return -1;
}

void onNewUser(SimpleOpenNI curContext, int userId)
{
  println("onNewUser - userId: " + userId);
  println("\tstart tracking skeleton");
 
  curContext.startTrackingSkeleton(userId);
}

public PVector getJointPosition2D(int userId, int jointId)
{
PVector joint2D = new PVector();
  context.convertRealWorldToProjective(getJointPosition(userId,jointId),joint2D);
return joint2D;
}


public PVector getJointPosition(int userId, int jointId)
{
  PVector joint = new PVector();
  context.getJointPositionSkeleton(userId, jointId, joint);
  return joint;
}

void keyPressed()
{
  switch(key)
  {
    case 'n':
   setNextState();
     break;
     
    case 'p':
    setPrevState();
    break;
  }
}


// compteur void time()


void setNextState()
{
  setState((currentState+1)%numStates);
}

void setPrevState()
{
  setState((currentState+numStates-1)%numStates);
}

void setState(int state)
{
  currentState = state;
  switch(currentState)
  {
     case 0:
       //on peut mettre des actions qui ne vont etre déclenchées qu'une seule fois a l'entrée d'un state
  break;
     
      //.... 
  }
}



http://codelab.fr/up/explication-mary-martin-geste-2.jpg
http://codelab.fr/up/explication-mary-martin-geste2-1.jpg
http://codelab.fr/up/explication-mary-martin-geste3-1.jpg

Dernière modification par martymarin (2016-05-09 12:06:29)

Hors ligne

 

#2 2016-05-09 17:45:04 Re : enregistrement et sauvegarde en jpeg

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: enregistrement et sauvegarde en jpeg



Bonjour,

Le principe est de sauvegarder les PGraphics dans un tampon. Lors de la sauvegarde on "affiche" dans un PGraphics tous ceux du tampon avant d'enregistrer.

ArrayList<PGraphics> tampon;
int tailleTampon;

void setup() {
  size(800, 600);
  tampon = new ArrayList<PGraphics>();
  tailleTampon = 20;
}

void draw() {
  background(0);
  PGraphics img = createGraphics(width, height);
  img.beginDraw();
  img.fill(255);
  img.ellipse(mouseX, mouseY, 50, 50);
  img.endDraw();
  tampon.add(img);
  if (tampon.size() >= tailleTampon) {
    tampon.remove(0);
  }
  image(img, 0, 0);
}

void keyPressed() {
  PGraphics img = createGraphics(width, height);
  img.beginDraw();
  for (PGraphics pg : tampon) {
    img.image(pg, 0, 0);
  }
  img.endDraw();
  img.save("tata.jpg");
}

Hors ligne

 

#3 2016-05-09 23:10:45 Re : enregistrement et sauvegarde en jpeg

martymarin
nouveau membre
Lieu: Rennes
Date d'inscription: 2016-01-25
Messages: 8
Site web

Re: enregistrement et sauvegarde en jpeg



désolé je suis débutante, mais je ne comprend pas comment je dois intégrer et où ça dans mon code hmm

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024