Roberto Ranon Sistemi Multimediali e Laboratorio Esercitazione 23/3/2014 ! In questa esercitazione, lavoreremo con colori e immagini. Esercizio 1 (modello colore) La funzione colorMode() modifica il modo in cui Processing interpreta i valori che vanno a definire un colore. Per default, i parametri per fill(), stroke(), background() e color() sono valori da 0 a 255 interpretati secondo il modello di colore RGB(A). La funzione colorMode() può cambiare sia il range, che il modello di colore. Ad esempio: colorMode(HSB, 100); imposta modello di colore Hue Saturation Brightness con valori tra 0 e 100 colorMode(RGB, 1.0); imposta modello di colore RGB con valori tra 0 e 1 colorMode(HSB, 360,100,100); imposta modello di colore HSB (anche detto HSL) con di hue tra 0 e 360, valori di saturation e brightness tra 0 e 100 ! Settare le dimensioni della finestra a 360x100 pixel. Disegnare 360 rettangoli affiancati verticalmente, ciascuno largo un pixel e alto come la finestra. Disabilitare lo stroke. Settare il colore di riempimento dei rettangoli in modo che coprano tutti i possibili livelli di hue. I livelli di saturation e brightness devono rispettivamente dipendere dalla posizione x e y del mouse, con la posizione (0,0) corrispondente a saturation e brightness al massimo, e la posizione (width, height) corrispondente a saturation e brightness al minimo. ! Esercizio 2 (colori complementari, percezione) Disegnare un quadrato al centro della finestra in modo che: - lo hue dello sfondo sia proporzionale a mouseY (dove mouseY = 0 corrisponde a hue=0 e mouseY = height corrisponde al valore massimo di hue (saturation e brightness a piacere) - lo hue del riempimento del quadrato e’ il colore complementare (valore massimo di hue - hue dello sfondo). - il lato del quadrato sia pari a mouseX + 1 ! Esercizio 3 (colori e immagini) Il codice seguente carica un’immagine e la visualizza: omehow, had reading to writethis code that translates function f you have someone been diligently book in precisely thethese prescribed order,c elsthe ononly the off screen to reflfor ectdrawing the requested shape. A line does not app ar, ered means to the screen is through a function call. ausepoints we color all the pixelswith along linear between points. hese ” or “Fill an ellipse reda” or “ loadpath this JPG image two and place it o img; // la someone classe predefinita PImage perthat la gestione di immagini omewhere, somehow, had toon write code translates these function ge this PImage a serve day-to-day basis. We have the !lower-level-pixel-setting ndividual pixels on{the drawing screen to refl ect the requested not a void setup() thank for the many functions that takeshape. care A ofline thisdoes business size(800,600); t appears because we color all the pixels along a linear path between two point img = loadImage("sunflower.jpg"); } have to time manage lower-level-pixel-setting a day-to-day basis. Weshape have t from to this time, we do want to breakonout of our mundane ! and Java) tothe thank void draw() { for the many drawing functions that take care of this busin pixels on screen directly. Processing provides this functionality vi background(0); image(img, 0, 0); // disegna l’immagine alle coordinate specificate Nevertheless, from time to time, we do want to break out of our mundane shap } ar with the idea of each pixeldirectly. on theProcessing screen having anthis X and Y posit deal with! the pixels on the screen provides functionality window.Consultate However, the array pixels hasperonly dimension, storing c la guida di riferimento delle funzioni di Processing maggiorione dettagli su PImage, loadImage() ,e image(). In particolare, per image() , controllate possibili argomenti loro significato . We are familiar idea of each i pixel on thee ilscreen having an X and Y po Figure 15.5. with the dimensional window. the array pixels has onlycopiate onenello dimension, storing Importante: le immaginiHowever, riferite nel programma devono essere precedentemente sketch folder mediante il comando di menu Sketch -> Add File ... equence. See Figure 15.5. L’accesso ai singoli pixel di un’immagine può essere effettuato in diversi modi. Il più efficiente consiste nell’accedere ad un array, chiamato pixels, che e‘ associato ad ogni immagine, e ne memorizza i pixel, organizzati in una sequenza lineare. 0 1 2 3 4 7 0 81 92 3 4 7 8 9 10 11 125 136 14 10 11 12 13 14 15 16 17 18 19 15 16 17 18 19 20 21 22 23 24 5 How the pixels look How the pixels look 6 20 21 22 23 24 How the pixels How the pixels are stored. are stored. Pixel dell’immagine 2 7 3 48 596 .7 .8 .9 . . . 0 1 2 3 40 51 6 15.5 fig. 15.5 I pixelfig.dell’immagine nell’array pixels ! Il codice seguente mostra come accedere ai singoli pixel di un’immagine, ed eventualmente modificarne il valore, prima di visualizzarla: Take the following example. This sketch sets each pixel in a window to a rando wingarray example. Thisansketch sets each pixel a window to do a random PImage img; like ixels just other array, the only diffin erence is that we not have !void issetup() {variable. just likesize(200,200); an other array, the only difference is that we do not have to Processing built-in img = loadImage("sunflower.jpg"); lt-in variable. Example 15-5: Setting pixels } ! ! void draw() { ! ! ! ! // carichiamo i pixel dell’immagine nel suo array pixels img.loadPixels(); for (int y = 0; y < img.height; y++ ) { for (int x = 0; x < img.width; x++ ) { int loc = x + y*img.width; // le funzioni red(), green(), and blue() accedono alle singoli componenti float r = red(img.pixels [loc]); float g = green(img.pixels[loc]); float b = blue(img.pixels[loc]); // Qui va inserito eventuale codice per modificare le componenti // scrive il pixel risultato nell’immagine. img.pixels[loc] = color(r,g,b); } } image(img, 0,0); } Il codice che legge e scrive i pixel potrebbe anche essere eseguito nella funzione setup(); la sua esecuzione nella funzione draw() consente di modificare l’immagine ad ogni frame. Esiste anche la funzione alpha() per l’accesso al canale alpha, e le funzioni hue(), saturation() e brightness() per accedere ai valori HSB. Modificare il programma precedente in modo da visualizzare solo la componente rossa di ogni pixel dell’immagine (provate anche con la sola componente verde e blu). Esercizio 4 (modificare i colori di un’immagine) Modificate il programma precedente in modo da dimezzare il valore di ogni componente RGB (provate anche a raddoppiare il valore di ogni componente). Esercizio 5 (modificare i colori di un’immagine) Modificate il programma precedente in modo da dimezzare il valore di saturation di ogni pixel (provate anche a raddoppiare, e a dimezzare / raddoppiare il valore di brightness). Esercizio 6 (visualizzare le componenti) Così come e’ possibile leggere e scrivere i pixel di un’immagine, e’ possibile leggere e scrivere i pixel della finestra, usando la funzione loadPixels(), l’array pixels (che funziona come per le immagini), e la funzione updatePixels(), che aggiorna la finestra con il contenuto dell’array pixels. Scrivete un programma che carichi un’immagine, la visualizza, e mostra in tre rettangoli affiancati il valore dei canali R, G e B del pixel dell’immagine su cui il mouse e’ posizionato. ! ! Esercizio 7 (immagini come palette di colori) In questo esercizio, useremo un’immagine come palette di colori. Dovete: - caricare un’immagine - disegnare una popolazione di oggetti in movimento (griglia di rettangoli, particelle: qualsiasi cosa da uno dei nostri esercizi precedenti), in cui ognuno usa il colore di un pixel a caso dell’immagine. Provate con diverse immagini, sia con pochi che con molti colori. Esercizio 8 (immagini come palette di colori) In questo esercizio, useremo un’immagine come palette di colori. Dovete: - caricare un’immagine - creare un array in cui memorizzare i colori di tutti i pixel dell’immagine. - ordinare l’array per brightness. - visualizza l’array ordinato disegnando, righe di quadrati di 5x5 pixels, in cui ogni quadrato visualizza un elemento dell’array a partire dall’alto a sinistra, e procedendo verso destra e verso il basso. Provate con diverse immagini, sia con pochi che con molti colori. ! ! ! !
© Copyright 2025 ExpyDoc