Kapacitiv touch humör/Ambilight (7 / 8 steg)
Steg 7: Ambi light - dator sidan
På sidan av datorn en bearbetning 1.0 skiss körs, finns i processing.org . Denna lilla (något kladdigt) beräknas den genomsnittliga screencolor i varje ögonblick och skickar detta till den seriella porten. Det är mycket grundläggande ännu och det kan använda några justeringar, men det fungerar mycket bra! Jag kommer att uppdatera den i framtiden för flera separata RGB remsor och skärmen sektioner. Du kan också göra det själv, de är ganska enkelt.Här är koden:
---Bearbetning 1.0 kod---
import processing.serial.*;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
PImage skärmdump;
Seriella myPort;
statiska public void main (String args[]) {
PApplet.main (nya String [] {
"--närvarande", "shooter"}
);
}
void setup() {
size(100,100); storlek (screen.width, screen.height);
Skriva ut en lista över de seriella portarna, för felsökning ändamål:
println(Serial.list());
Jag vet att den första porten i listan följetong på min mac
är alltid min FTDI adapter, så jag öppnar Serial.list() [0].
På Windows-maskiner, allmänt öppnas COM1.
Öppna oavsett port är den du använder.
Sträng portName = Serial.list() [0];
myPort = ny följetong (här, portName, 9600);
}
void Rita () {
bild (skärmdump, 0, 0, bredd, höjd);
Skärmdump = getScreen();
färg 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);
}
färg colour(PImage img) {
int cols = (img.width);
int rader = (img.height);
int dimension = (img.width*img.height);
int r = 0;
int g = 0;
int b = 0;
img.loadPixels();
Ga elke pixel langs (dimension)
för (int jag = 0; jag < (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);
färg mean_clr = färg (mean_r, mean_g, mean_b);
myPort.write('S');
myPort.write(mean_r);
myPort.write(mean_g);
myPort.write(mean_b);
Return (mean_clr);
}
PImage getScreen() {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice [] gs = ge.getScreenDevices();
DisplayMode läge = gs[0].getDisplayMode();
Rektangel bounds = nya rektangel (0, 0, mode.getWidth(), mode.getHeight());
BufferedImage desktop = nya BufferedImage(mode.getWidth(), mode.getHeight(), BufferedImage.TYPE_INT_RGB);
försök {
Desktop = nya Robot(gs[0]).createScreenCapture(bounds);
}
fånga (AWTException e) {
System.ERR.println ("skärm ta till fånga misslyckades.");
}
avkastning (nya PImage(desktop));
}
---SLUT---