Pages: 1
Bonjour à tous,
Avec l’aide de l’utilisateur 'Mushussu' à été formuleé ce programme ci :
PImage img ; PImage img2; void setup() { lireImg(); } void lireImg(){ String Img=selectInput(); img = loadImage(Img); size(img.width, img.height); image(img, 0, 0); img2 = createImage(width, height, RGB); } void draw() { noirEtBlanc(); } void noirEtBlanc(){ img.loadPixels(); for (int i = 0; i < img.pixels.length; i++) { int x = i % width; int y = i / width; if (sqrt((mouseX - x) * (mouseX - x) + (mouseY - y) * (mouseY - y)) < 50) { img2.pixels[i] = color(brightness(img.pixels[i])); } else { img2.pixels[i] = img.pixels[i]; } } img2.updatePixels(); image(img2, 0, 0); }
J’ai définie deux fonction à partir de la base déjà développé ('LireImg' et 'noirEtBlac')et je voudrais ne ajouter un troisième mai je n’arrive pas
La première fonction 'lireImg' inclue la partie de code député à charger l’image, la deuxième gère la partie de code que s’occupe de changer la couleur de pixels.
Mais, est ce qu'il Ya une moyenne pour créer une troisième fonction que peut se charger de contrôler la partie du code relatif au « cercle gris » ?
Ça, c’est mon essaye de créer une fonction qui en fait divise la fonction précèdent (noirEtBlanc):
PImage img ; PImage img2; void setup() { lireImg(); } void lireImg(){ String Img=selectInput(); img = loadImage(Img); size(img.width, img.height); image(img, 0, 0); img2 = createImage(width, height, RGB); } void draw() { NoirEtBlanc(); cercle(); } void NoirEtBlanc(){ img.loadPixels(); for (int i = 0; i < img.pixels.length; i++) { int x = i % width; int y = i / width; } void cercle(){ if (sqrt((mouseX - x) * (mouseX - x) + (mouseY - y) * (mouseY - y)) < 50) { img2.pixels[i] = color(brightness(img.pixels[i])); } else { img2.pixels[i] = img.pixels[i]; } } img2.updatePixels(); image(img2, 0, 0); }
J’ai essayez plusieurs combinassions de code mais sans y arriver…
Merci encore à tous
Dernière modification par Sara (2016-05-08 18:29:09)
Hors ligne
Cela ne me paraît guère pertinent de vouloir scinder en plusieurs méthodes. Mais bon !
De plus Processing n'accepte plus que la taille de la fenêtre de rendu soit générée par des variables. Je propose de la définir en fixe été d'ajuster la taille des images.
PImage img ; PImage img2; void setup() { size(800, 600); selectInput("Choisir une image", "lireImg"); img2 = createImage(width, height, RGB); } void lireImg(File selection) { img = loadImage(selection.getAbsolutePath()); img.resize(width, height); } void draw() { NoirEtBlanc(); } void NoirEtBlanc() { if (img != null) { img.loadPixels(); for (int i = 0; i < img.pixels.length; i++) { int x = i % width; int y = i / width; if (cercle(x, y, 50)) { img2.pixels[i] = color(brightness(img.pixels[i])); } else { img2.pixels[i] = img.pixels[i]; } } img2.updatePixels(); image(img2, 0, 0); } } boolean cercle(int x, int y, int diametre) { return (sqrt((mouseX - x) * (mouseX - x) + (mouseY - y) * (mouseY - y)) < diametre); }
Hors ligne
Merci beaucoup Mushussu, j’ai adapté une peut le code parce que ne marche pas comme ça.
Es que c’est correct quand même ?
PImage img2; void setup() { lireImg(); //size(800, 600); //selectInput("Choisir une image", "lireImg"); } void lireImg() { String Img=selectInput(); img = loadImage(Img); size(img.width, img.height); image(img, 0, 0); //img = loadImage(selection.getAbsolutePath()); img2 = createImage(width, height, RGB); img.resize(width, height); } void draw() { NoirEtBlanc(); } void NoirEtBlanc() { if (img != null) { img.loadPixels(); for (int i = 0; i < img.pixels.length; i++) { int x = i % width; int y = i / width; if (cercle(x, y, 50)) { img2.pixels[i] = color(brightness(img.pixels[i])); } else { img2.pixels[i] = img.pixels[i]; } } img2.updatePixels(); image(img2, 0, 0); } } boolean cercle(int x, int y, int diametre) { return (sqrt((mouseX - x) * (mouseX - x) + (mouseY - y) * (mouseY - y)) < diametre); }
J’ai un doute : à quoi ça serve la fonction ‘boolean’ ? Je pas bien compris le concept même dans le Reference
https://processing.org/reference/boolean.html
Hors ligne
J’ai trouvé une nouvelle source pour ce souci de changer des couleurs dans une échelle de gris, voilà :
http://www.tannerhelland.com/3643/grays … rithm-vb6/
Les façons de créer un spot en noir-blanc montré ici sont vraiment très expressives !
Je voudrais transformer la couleur d'origine (comme paramètre) dans une couleur présentant toutes les composantes R, G et B égale. En particulier, la valeur qui doit prendre les composantes (R, G, B) est égale au niveau de couleurs plus large entre les niveaux de rouge, vert et bleu de la couleur d'origine.
Est-ce que c’est possible d’appliquer cet type de modif au programme déjà développé ?
For Each Pixel in Image { Red = Pixel.Red Green = Pixel.Green Blue = Pixel.Blue Gray = Max(Red, Green, Blue) Pixel.Red = Gray Pixel.Green = Gray Pixel.Blue = Gray }
En restant en sujet de pixels, moi par contre, j’ai rajouté un conteur de pixels et de couleur à notre programme (j’espère que ça vous dite) :
void setup() { lireImg(); } void lireImg(){ String Img=selectInput(); img = loadImage(Img); size(img.width, img.height); image(img, 0, 0); img2 = createImage(width, height, RGB); } void mouseMoved() { color c = get(mouseX, mouseY); color r = c >> 020 & 0xFF; color g = c >> 010 & 0xFF; color b = c & 0xFF; print( "(" + mouseX + "," + mouseY + ") \t\tColor: #" + hex(c) ); println( "\tR: " + r + "\t G: " + g + "\t B: " + b ); } void draw() { NoirEtBlanc(); } void NoirEtBlanc(){ img.loadPixels(); for (int i = 0; i < img.pixels.length; i++) { int x = i % width; int y = i / width; if (sqrt((mouseX - x) * (mouseX - x) + (mouseY - y) * (mouseY - y)) < 50) { img2.pixels[i] = color(brightness(img.pixels[i])); } else { img2.pixels[i] = img.pixels[i]; } } img2.updatePixels(); image(img2, 0, 0); }
Hors ligne
La méthode setup() sert à initialiser les valeurs. Il est recommandé que size() soit la première instruction du setup.
De plus l'adjonction de la méthode lireImg est sans nécessité.
Voici le code modifié si tu souhaites ajuster les valeurs de gris :
PImage img ; PImage img2; void setup() { size(800, 600); selectInput("Choisir une image", "lireImg"); img2 = createImage(width, height, RGB); } void lireImg(File selection) { img = loadImage(selection.getAbsolutePath()); img.resize(width, height); } void draw() { NoirEtBlanc(); } void NoirEtBlanc() { if (img != null) { img.loadPixels(); for (int i = 0; i < img.pixels.length; i++) { int x = i % width; int y = i / width; if (cercle(x, y, 50)) { int r = img.pixels[i] >> 16 & 0xFF; int g = img.pixels[i] >> 8 & 0xFF; int b = img.pixels[i] & 0xFF; img2.pixels[i] = color(max(r, g, b)); } else { img2.pixels[i] = img.pixels[i]; } } img2.updatePixels(); image(img2, 0, 0); } } boolean cercle(int x, int y, int diametre) { return (sqrt((mouseX - x) * (mouseX - x) + (mouseY - y) * (mouseY - y)) < diametre); }
Hors ligne
Le code est génial ! Parfait !
Cependant, moi j’ai toujours le même souci avec la première partie que me donne une erreur et me force à changer le code dans cette façon :
PImage img ; PImage img2; void setup() { lireImg(); } void lireImg() { String Img=selectInput(); img = loadImage(Img); size(img.width, img.height); image(img, 0, 0); img2 = createImage(width, height, RGB); }
Ça, c’est l’erreur que me donne Processing :
Pourquoi le programme me rende cet type de erreur ?
Un très grand merci
Hors ligne
C'est très étonnant !
Quel version de Processing utilises-tu ? Et sur quelle plateforme, OS ?
Hors ligne
Processing 1.5.1 et j'ai Windows
Hors ligne
Je comprends mieux, ta version de Processing est vieille comme Hérode. N'est-il pas possible d'en prendre une plus récente ? La 3 ?
Hors ligne
Mdr! Oui, en fait ma version c’est un peu obsolète, je ferai l’upgrade bientôt
Hors ligne
Pages: 1