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:
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);
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).
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) è:
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();
}
Mi sono spiegata come meglio ho potuto. Qualcuno può aiutarmi a capire come agire sui singoli pixel con la funzione random?