Bonjour,
Dans le cadre de mon projet de Terminale de Science de l'ingénieur, je réalise avec mon groupe un concept de table connectée. Ma partie est de réaliser une interface homme machine et je travailles en ce moment sur le controle d'une LED rouge/vert/bleu connectée à une carte arduino.
J'ai réussi à réaliser un bouton on/off sur Processing et Arduino le reçoit. J'ai ensuite intégré un selecteur de couleur rgb sur ma fenetre. Je ne comprends pas trop ce code, je ne suis pas un expert en programmation et encore moi en programation objet tel que Java. J'ai quand meme réussi à déplace le selecteur ou je veux.
Mon problème est que je ne trouve pas comment faire pour récupérer la valeur de la couleur sélectionnée en RGB, ou hexadécimal. Si j'ai cette valeur je pourrait facilement me débrouiller pour changer la couleur de la LED.
Voici le bout de code qui affiche le sélecteur :
public class ColorPicker { int x, y, w, h, c; PImage cpImage; public ColorPicker ( int x, int y, int w, int h, int c ) { this.x = x; this.y = y; this.w = w; this.h = h; this.c = c; cpImage = new PImage( w, h ); init(); } private void init () { x = 250; y = 50; // draw color. int cw = w - 60; for( int i=0; i<cw; i++ ) { float nColorPercent = i / (float)cw; float rad = (-360 * nColorPercent) * (PI / 180); int nR = (int)(cos(rad) * 127 + 128) << 16; int nG = (int)(cos(rad + 2 * PI / 3) * 127 + 128) << 8; int nB = (int)(Math.cos(rad + 4 * PI / 3) * 127 + 128); int nColor = nR | nG | nB; setGradient( i, 0, 1, h/2, 0xFFFFFF, nColor ); setGradient( i, (h/2), 1, h/2, nColor, 0x000000 ); } } private void setGradient(int x, int y, float w, float h, int c1, int c2 ) { float deltaR = red(c2) - red(c1); float deltaG = green(c2) - green(c1); float deltaB = blue(c2) - blue(c1); for (int j = y; j<(y+h); j++) { int c = color( red(c1)+(j-y)*(deltaR/h), green(c1)+(j-y)*(deltaG/h), blue(c1)+(j-y)*(deltaB/h) ); cpImage.set( x, j, c ); } } private void drawRect( int rx, int ry, int rw, int rh, int rc ) { for(int i=rx; i<rx+rw; i++) { for(int j=ry; j<ry+rh; j++) { cpImage.set( i, j, rc ); } } } public void render () { image( cpImage, x, y ); if( mousePressed && mouseX >= x && mouseX < x + w && mouseY >= y && mouseY < y + h ) { c = get( mouseX, mouseY ); } fill( c ); rect( x, y+h+10, 20, 20 ); //rectangle affichant la couleur; } }
Quand j'affiche c (la variable qui représente d'après ce que j'ai compris la couleur sélectionnée), j'obtient des trucs du genre -332549. Donc je sais pas quoi en faire de cette valeur...
Conaissez vous un moyen de récupérer cette valeur en RGB ou hexadécimal?
Merci d'avance.
(voici le code complet au cas où) :
Hors ligne
Bonjour,
Le codage d'une couleur se fait sur un entier donc sur 32 bits, donc 4 octets. Si tu passes ton entier en hexadécimal, l'octet de pois fort est l'alpha le second le rouge, le troisième le vert et enfin l'octet de poids faible est le bleu :
AARRVVBB
Donc la classe c'est la méthode get :
https://processing.org/reference/get_.html
qui lit le point désigné par la souris et renvoi un entier que tu peux ensuite triturer avec les méthodes red(), green() et blue().
https://processing.org/reference/red_.html
Ajoute ceci après le fill( c );
println("Rouge : " + red(c) + " Vert : " + green(c) + " Bleu : " + blue(c));
Bon courage
Hors ligne
Merci beaucoup, ca marche super bien !
Ca m'aide beaucoup !
Hors ligne
Pages: 1