D'accordo, grazie per la compresione Oregon...ora ci provo: il progetto che mi viene chiesto di realizzare riguarda l'elaborazione delle immagini tramite il linguaggio Processing. Posto il punto in cui sto trovando difficoltà:
Parte1: Definire la funzione AnnullaColori
La funzione considera una immagine e le coordinate di una regione
rettangolare: xmin, ymin, xmax, ymax (vedi figura)
Restituisce l'immagine formata ponendo a zero una a caso delle tra
componenti fondamentali di ciascuno dei pixel.
Suggerimento: usare la funzione random.
Sono riuscita a far funzionare la funzione random (scusate il gioco di parole) con il seguente codice:
Il tutto per ora funziona perfettamente perchè ho costruito un rettangolo apposito per verificare la casualità dell'annullamento del colore di uno dei 3 canali (r,g,b).codice:float k; float r=40; float g=150; float b=150; int z; size(300,300); background(255); k=random(1,4); z=int(k); if(z==1){ r=0;g=150;b=150; fill(r,g,b); } if(z==2){ r=40;g=0;b=150; fill(r,g,b); } if(z==3){ r=40;g=150;b=0; fill(r,g,b); } print(r+" "+g+" "+b); rectMode(CORNER); rect(100,100,50,50);
Ma questo procedimento non funziona quando si tratta di modificare i pixel dell'immagine caricata a scelta dall'utente una volta partito il run di Processing. Il codice che mi permette di caricare un'immagine a scelta e agire su di essa (per ora senza alcun successo) è:
Mi sono spiegata come meglio ho potuto. Qualcuno può aiutarmi a capire come agire sui singoli pixel con la funzione random?codice:PImage img; //creo l'oggetto img void setup() { String immagine = selectInput(); //seleziono un immagine presente all'interno del cp img = loadImage(immagine); //trasferisco l'immagine in img size(img.width, img.height); //genero la finestra di processing inserendo come parametri la larghezza e l'altezza dell'immagine selezionata } void draw() { int locazionelineare; // questa variabile conterrà la posizione (lineare) del pixel color coloreDelPixel;// questa variabile conterrà il colore del pixel float r; // questa variabile conterrà il valore del canale 'rosso' per il singolo pixel float g; // questa variabile conterrà il valore del canale 'verde' per il singolo pixel float b; // questa variabile conterrà il valore del canale 'blu' per il singolo pixel // devo accedere ai pixel della finestra (in scrittura) loadPixels(); // devo accedere (in lettura) anche ai pixel dell'oggett PImage img img.loadPixels(); for (int y = 0; y < img.height; y++ ) { for (int x = 0; x < img.width; x++ ) { // calcolo la posizione (lineare) del pixel locazionelineare = x + y*img.width; // per il pixel in esame, estraggo i singoli canali di colore.... r = red(img.pixels [locazionelineare]); g = green(img.pixels[locazionelineare]); b = blue(img.pixels[locazionelineare]); // ... e poi ricreo il colore coloreDelPixel=color (r, g, b); // copio il colore del pixel dalla variabile alla finestra pixels[locazionelineare] = coloreDelPixel; } } // ora devo aggiornare l'immagine in finestra. Infatti ho alterato i pixel nell'array PIXELS // ma questi pixel non sono ancora visibili. updatePixels(); }

Rispondi quotando