Stap 7: Ambi light - Computer kant
Aan de zijkant van de computer die een schets verwerking 1.0 wordt uitgevoerd, Zie processing.org . Dit kleine (enigszins rommelig) programma berekent de gemiddelde screencolor bij elk moment en stuurt dit naar de seriële poort. Het is erg basic nog en het kon gebruiken wat tweaken, maar het werkt erg goed! Ik zal het in de toekomst voor meerdere afzonderlijke RGB strips en scherm secties bijwerken. Je kunt dat zelf ook doen, de taal is vrij rechtdoorzee.Hier is de code:
---Verwerking 1.0 Code---
importeren van processing.serial.*;
importeren van java.awt.AWTException;
importeren van java.awt.Robot;
importeren van java.awt.Rectangle;
importeren van java.awt.image.BufferedImage;
ScreenShot van de PImage;
Seriële myPort;
openbare statische nietige leiding (Koord args[]) {}
PApplet.main (nieuwe String [] {}
"--aanwezig", "shooter"}
);
}
VOID Setup {}
size(100,100); grootte (screen.width, screen.height);
Een overzicht afdrukken van de seriële poorten, voor foutopsporing:
println(Serial.List());
Ik weet dat de eerste poort in de seriële lijst op mijn mac
is altijd mijn FTDI adapter, dus ik Serial.list() [0 open].
Op Windows-computers wordt dit over het algemeen geopend COM1.
Open welke poort is degene die u gebruikt.
String portName = Serial.list() [0];
myPort = nieuwe Serial (deze, portName, 9600);
}
VOID tekenen () {}
afbeelding (screenShot, 0, 0, breedte, hoogte);
screenShot = getScreen();
kleur 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);
}
kleur colour(PImage img) {}
int cols = (img.width);
int. rijen = (img.height);
int dimensie = (img.width*img.height);
int r = 0;
int g = 0;
int b = 0;
img.loadPixels();
Ga elke pixel langs (dimensie)
for (int i = 0; ik < (dimensie/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);
mean_clr kleur = kleur (mean_r, mean_g, mean_b);
myPort.write('S');
myPort.write(mean_r);
myPort.write(mean_g);
myPort.write(mean_b);
keren (mean_clr);
}
PImage getScreen() {}
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice [] gs = ge.getScreenDevices();
DisplayMode modus = gs[0].getDisplayMode();
Grenzen van de rechthoek = nieuwe rechthoek (0, 0, mode.getWidth(), mode.getHeight());
BufferedImage desktop = nieuwe BufferedImage(mode.getWidth(), mode.getHeight(), BufferedImage.TYPE_INT_RGB);
Probeer {}
Desktop = nieuwe Robot(gs[0]).createScreenCapture(bounds);
}
vangst (AWTException e) {}
System.err.println ("Screen capture is mislukt.");
}
terugkeer (nieuwe PImage(desktop));
}
---EINDE---