Étape 7: Ambi light - côté ordinateur
Du côté de l’ordinateur qu'une esquisse de traitement 1.0 est exécutée, voir processing.org . Ce petit programme (un peu salissant) calcule la moyenne screencolor à chaque instant et cela envoie au port série. Il est très basique pour le moment et qu’elle pourrait utiliser quelques ajustements, mais il fonctionne très bien ! Je mettrai à jour à l’avenir des multiples séparés RGB scindés et des sections de l’écran. Vous pourriez également faire cela vous-même, la langue est assez simple.Voici le code :
---Traitement 1,0 Code---
Import processing.serial.* ;
java.awt.AWTException d’importation ;
java.awt.Robot d’importation ;
java.awt.Rectangle d’importation ;
java.awt.image.BufferedImage d’importation ;
Capture d’écran de Byte ;
Serial myPort ;
public Sub main (String args[]) {}
PApplet.main (new String [] {}
"--présente", "shooter"}
);
}
void setup() {}
Size(100,100) ; taille (screen.width, screen.height) ;
Imprimer la liste des ports série, pour des fins de débogage :
println(Serial.List()) ;
Je sais que le premier port dans la liste de série sur mon mac
est-ce toujours mon adaptateur FTDI, alors j’ai ouvert Serial.list() [0].
Sur les machines Windows, cela ouvre généralement COM1.
Ouvert quelque port est celui que vous utilisez.
String portName = Serial.list() [0] ;
myPort = nouvelle série (ce, portName, 9600) ;
}
tirage au sort Sub () {}
image (capture d’écran, 0, 0, largeur, hauteur) ;
capture d’écran = getScreen() ;
Color kleur = color(0,0,0) ;
kleur = colour(screenShot) ;
myPort.write(int(red(kleur))+','+int(green(kleur))+','+int(blue(kleur))+13) ;
myPort.write(int(red(kleur))) ;
myPort.write(',') ;
myPort.write(int(green(kleur))) ;
myPort.write(',') ;
myPort.write(int(blue(kleur))) ;
myPort.write(13) ;
Fill(kleur) ;
Rect (30, 20, 55, 55) ;
}
couleur colour(PImage img) {}
int cols = (img.width) ;
lignes d’int = (img.height) ;
dimension int = (img.width*img.height) ;
int r = 0 ;
g int = 0 ;
int b = 0 ;
img.loadPixels() ;
Pixel d’elke GA langs (dimension)
pour (int i = 0; i < (dimension/2); i ++) {
r = r + ((img.pixels[i] >> 16) & 0xFF) ;
g = g + ((img.pixels[i] >> 8) & 0xFF) ;
b = b + (img.pixels[i] & 0xFF) ;
}
int mean_r = r/(dimension/2) ;
int mean_g = g/(dimension/2) ;
int mean_b = b/(dimension/2) ;
couleur mean_clr = couleur (mean_r, mean_g, mean_b) ;
myPort.write('S') ;
myPort.write(mean_r) ;
myPort.write(mean_g) ;
myPort.write(mean_b) ;
retour (mean_clr) ;
}
{GetScreen() Byte
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment() ;
GraphicsDevice [] gs = ge.getScreenDevices() ;
Mode de DisplayMode = gs[0].getDisplayMode() ;
Limites du rectangle = new Rectangle (0, 0, mode.getWidth(), mode.getHeight()) ;
Bureau de BufferedImage = nouveau BufferedImage(mode.getWidth(), mode.getHeight(), BufferedImage.TYPE_INT_RGB) ;
try {}
bureau = new Robot(gs[0]).createScreenCapture(bounds) ;
}
{} catch (e AWTException)
System.Err.println ("capture d’écran a échoué.") ;
}
retour (nouveau PImage(desktop)) ;
}
---END---