mpe library problem
in
Contributed Library Questions
•
3 years ago
Good morning!
I'm developing a program with mpe library. I want to create a scanimation starting from 6 images acquired by a camera. Here is the code of the 2 files that i syncronize between them.
// librerie TRASFERIMENTO DATI
import mpe.client.*;
// librerie CAMERA
import hypermedia.video.*;
import codeanticode.gsvideo.*;
// variabili TRASFERIMENTO DATI
TCPClient c; // oggetto client MPE
boolean start; // utilizzato da MPE per iniziare la sincronizzazione dei client
// variabili CAMERA
OpenCV opencv;
GSCapture cam;
// variabili SCANIMATION
int n=0, // usata per conteggiare il numero di "foto"
nframes=6, // numero di "foto" da scattare
maxx, // larghezza immagine
maxy; // altezza immagine
PImage[] frame = new PImage[nframes]; // vettore che conterrà i vari frame
PImage scanimage, // conterrà l'immagine di scanimation
maskimage; // conterrà l'immagine di maschera
String nomep = "foto"; // inizio del nome del file delle "foto"
String[] fname = new String[nframes];
// ALTRE variabili
int lc = 262, // larghezza finestra-camera
ac = 196; // altezza finestra-camera
boolean fine_foto = false; // settato a TRUE quando finisco di scattare le "foto" per far iniziare lo scanimation
boolean fine_scanimation = false; // settato a TRUE quando finisce la fase di scanimation
void setup(){
// IMMAGINE
maxx = lc; // imposto la LARGHEZZA massima dell'immagine pari alla larghezza della finestra della cam
maxy = ac; // imposto l'ALTEZZA massima dell'immagine pari all'altezza della finestra della cam
// CAMERA
opencv = new OpenCV(this); // nuovo oggetto OpenCV
opencv.allocate(lc, ac); // allocazione camera
opencv.capture(lc, ac); // acquisizione dalla camera
// TRASFERIMENTO DATI
c = new TCPClient(sketchPath("mpe.ini"), this); // nuovo oggetto TCPClient
size(c.getLWidth(),c.getLHeight()); // dimensione della finestra
randomSeed(42); // tutti i client devono avere lo stesso randomSeed
c.start(); // avvio il client
}
void draw(){
}
void frameEvent(TCPClient c){
background(0);
fill(0);
opencv.read();
image(opencv.image(),0,0);
if(fine_foto && !fine_scanimation){ // se ho finito di scattare le foto
scanimation();
animazione();
}
}
void animazione(){
// visualizzazione immagine di scanimation
scanimage = loadImage(nomep+"_scanimage.png");
----->>>>>>> HERE IS THE PROBLEM ->>> image(scanimage, 480, 120, width/2, height/2); // visualizzo l'immagine ridimensionandola <<<<<<<<<---------
noLoop();
}
void scanimation(){
println("INIZIO SCANIMATION!");
for(int i=0; i<nframes; i++){
println("ELABORAZIONE FOTO N°"+(i+1)+"IN CORSO!");
fname[i] = nomep + "-"+i+".jpg";
println("IMMAGINE: "+fname[i]);
frame[i] = loadImage("ridim/"+fname[i]);
}
maxx = frame[0].width;
maxy = frame[0].height;
// creazione dell'immagine di scanimation
scanimage = createImage(maxx, maxy, ARGB); // creo un'immagine per memorizzare l'immagine di SCANIMATION
for(int f=0; f<nframes; f++){
for(int c=0; c<maxx; c += nframes){
for(int y=0; y<maxy-1; y++){
scanimage.pixels[maxx * y + f + c] = frame[f].pixels[maxx * y + f + c];
}
}
}
scanimage.save(nomep + "_scanimage.png"); // salvataggio dell'immagine di scanimation
// creazione dell'immagine di maschera
maskimage = createImage(maxx, maxy, RGB); // creo un'immagine per memorizzare l'immagine di MASCHERA
for (int x=0; x<maskimage.width; x += nframes){
for (int y=0; y < maskimage.height; y++){
maskimage.pixels[maxx * y + x] = color(255, 255, 255);
}
}
maskimage.save(nomep + "_mask.png");
fine_scanimation = true;
}
void mousePressed(){
if(n<nframes){ // se n è minore del totale delle "foto" da scattare..
save("data/"+nomep+"-" +n+ ".jpg"); // salvo l'immagine
frame[n] = loadImage("data/"+nomep + "-" +n+ ".jpg"); // carico l'immagine in "b"
println("VISUALIZZAZIONE FOTO N° "+n);
image(frame[n], 0, 0, width*2.45, height*2.45); // visualizzo l'immagine ridimensionandola
save("ridim/"+nomep+"-"+n+".jpg"); // salvo l'immagine ridimensionata
println ("SCATTATA FOTO N° "+ n); // scatto la foto
n++; // incremento il contatore
}
else{
println("NON PUOI SCATTARE ALTRE FOTO!");
fine_foto = true;
println("PAUSA!");
}
}
The problem is that when (IN THE "HERE IS THE PROBLEM" LINE) i want to visualize the an image, i see half image only in the first screen but i see nothing in the second screen. I tried also changing the mpe.ini files but nothing is happened. Obviously i want to visualize half image in the first screen and half of image in the second screen!
Here the code of the .ini files:
1)
id=0;
server=localhost;
port=9002;
localScreenSize=640,480;
localLocation=0,0;
masterDimensions=1280,480;
debug=0;
2)
id=1;
server=localhost;
port=9002;
localScreenSize=640,480;
localLocation=640,0;
masterDimensions=1280,480;
debug=0;
Thanks. Elias! :)
I'm developing a program with mpe library. I want to create a scanimation starting from 6 images acquired by a camera. Here is the code of the 2 files that i syncronize between them.
// librerie TRASFERIMENTO DATI
import mpe.client.*;
// librerie CAMERA
import hypermedia.video.*;
import codeanticode.gsvideo.*;
// variabili TRASFERIMENTO DATI
TCPClient c; // oggetto client MPE
boolean start; // utilizzato da MPE per iniziare la sincronizzazione dei client
// variabili CAMERA
OpenCV opencv;
GSCapture cam;
// variabili SCANIMATION
int n=0, // usata per conteggiare il numero di "foto"
nframes=6, // numero di "foto" da scattare
maxx, // larghezza immagine
maxy; // altezza immagine
PImage[] frame = new PImage[nframes]; // vettore che conterrà i vari frame
PImage scanimage, // conterrà l'immagine di scanimation
maskimage; // conterrà l'immagine di maschera
String nomep = "foto"; // inizio del nome del file delle "foto"
String[] fname = new String[nframes];
// ALTRE variabili
int lc = 262, // larghezza finestra-camera
ac = 196; // altezza finestra-camera
boolean fine_foto = false; // settato a TRUE quando finisco di scattare le "foto" per far iniziare lo scanimation
boolean fine_scanimation = false; // settato a TRUE quando finisce la fase di scanimation
void setup(){
// IMMAGINE
maxx = lc; // imposto la LARGHEZZA massima dell'immagine pari alla larghezza della finestra della cam
maxy = ac; // imposto l'ALTEZZA massima dell'immagine pari all'altezza della finestra della cam
// CAMERA
opencv = new OpenCV(this); // nuovo oggetto OpenCV
opencv.allocate(lc, ac); // allocazione camera
opencv.capture(lc, ac); // acquisizione dalla camera
// TRASFERIMENTO DATI
c = new TCPClient(sketchPath("mpe.ini"), this); // nuovo oggetto TCPClient
size(c.getLWidth(),c.getLHeight()); // dimensione della finestra
randomSeed(42); // tutti i client devono avere lo stesso randomSeed
c.start(); // avvio il client
}
void draw(){
}
void frameEvent(TCPClient c){
background(0);
fill(0);
opencv.read();
image(opencv.image(),0,0);
if(fine_foto && !fine_scanimation){ // se ho finito di scattare le foto
scanimation();
animazione();
}
}
void animazione(){
// visualizzazione immagine di scanimation
scanimage = loadImage(nomep+"_scanimage.png");
----->>>>>>> HERE IS THE PROBLEM ->>> image(scanimage, 480, 120, width/2, height/2); // visualizzo l'immagine ridimensionandola <<<<<<<<<---------
noLoop();
}
void scanimation(){
println("INIZIO SCANIMATION!");
for(int i=0; i<nframes; i++){
println("ELABORAZIONE FOTO N°"+(i+1)+"IN CORSO!");
fname[i] = nomep + "-"+i+".jpg";
println("IMMAGINE: "+fname[i]);
frame[i] = loadImage("ridim/"+fname[i]);
}
maxx = frame[0].width;
maxy = frame[0].height;
// creazione dell'immagine di scanimation
scanimage = createImage(maxx, maxy, ARGB); // creo un'immagine per memorizzare l'immagine di SCANIMATION
for(int f=0; f<nframes; f++){
for(int c=0; c<maxx; c += nframes){
for(int y=0; y<maxy-1; y++){
scanimage.pixels[maxx * y + f + c] = frame[f].pixels[maxx * y + f + c];
}
}
}
scanimage.save(nomep + "_scanimage.png"); // salvataggio dell'immagine di scanimation
// creazione dell'immagine di maschera
maskimage = createImage(maxx, maxy, RGB); // creo un'immagine per memorizzare l'immagine di MASCHERA
for (int x=0; x<maskimage.width; x += nframes){
for (int y=0; y < maskimage.height; y++){
maskimage.pixels[maxx * y + x] = color(255, 255, 255);
}
}
maskimage.save(nomep + "_mask.png");
fine_scanimation = true;
}
void mousePressed(){
if(n<nframes){ // se n è minore del totale delle "foto" da scattare..
save("data/"+nomep+"-" +n+ ".jpg"); // salvo l'immagine
frame[n] = loadImage("data/"+nomep + "-" +n+ ".jpg"); // carico l'immagine in "b"
println("VISUALIZZAZIONE FOTO N° "+n);
image(frame[n], 0, 0, width*2.45, height*2.45); // visualizzo l'immagine ridimensionandola
save("ridim/"+nomep+"-"+n+".jpg"); // salvo l'immagine ridimensionata
println ("SCATTATA FOTO N° "+ n); // scatto la foto
n++; // incremento il contatore
}
else{
println("NON PUOI SCATTARE ALTRE FOTO!");
fine_foto = true;
println("PAUSA!");
}
}
The problem is that when (IN THE "HERE IS THE PROBLEM" LINE) i want to visualize the an image, i see half image only in the first screen but i see nothing in the second screen. I tried also changing the mpe.ini files but nothing is happened. Obviously i want to visualize half image in the first screen and half of image in the second screen!
Here the code of the .ini files:
1)
id=0;
server=localhost;
port=9002;
localScreenSize=640,480;
localLocation=0,0;
masterDimensions=1280,480;
debug=0;
2)
id=1;
server=localhost;
port=9002;
localScreenSize=640,480;
localLocation=640,0;
masterDimensions=1280,480;
debug=0;
Thanks. Elias! :)
2