Coordinate
L´elaborazione grafica in Processing utilizza un sistema di coordinate cartesiane 3D, come rappresentato in Figura 1.
| Sistema di coordinate |
|---|
![]() |
size() definisce la dimensione della
finestra di display e stabilisce quale motore di
rendering sarà utilizzato per disegnare su tale
finestra. Il motore di default è JAVA2D, cioè la libreria di
grafica bidimensionale di Java. Se si desidera operare sulle
tre dimensioni è necessario impostare il rendering P3D
(Processing 3D), particolarmente efficiente per la grafica
su web, oppure OPENGL, che consente di delegare alla scheda
grafica molte operazioni tipiche della grafica 3D.
Immagini
In Processing, una immagine può essere assegnata ad un oggetto
di tipo PImage. La funzione
loadImage("myImage") preleva il file (gif o jpg)
myImage, contenente la codifica di una immagine,
e restituisce in uscita il contenuto in pixel della immagine
stessa, il quale può essere assegnato ad una variabile di tipo
PImage. Il file myImage deve essere
caricato nella cartella data della directory
avente lo stesso nome dello sketch Processing al quale si sta
lavorando.
Nota:
New, Processing apre una cartella di nome
sketch_???????, all'interno di una directory
Processing, corrispondente al nome
assegnato dal sistema al file al quale si comincia a
lavorare. Tale cartella è accessibile tramite i comandi del
menu File/Sketch di Processing.PImage rende accessibili, mediante i campi
width e height, rispettivamente la
larghezza e la altezza della immagine caricata. Il contenuto è
invece accessibile mediante il campo pixels[].
Esempio 1: Caricamento e visualizzazione di una immagine
size(400,300);
PImage b;
b = loadImage("gondoliers.jpg");
println("width=" + b.width + " height=" + b.height);
image(b, 0, 0, 400, 300); // position (0,0); width=400; height=300;
image(b, 20, 10, 100, 80); // position (20,10); width=100; height=80;
Colori
Poiché i nostri ricettori oculari di colore (coni), ciascuno sintonizzato su una regione di lunghezze d'onda, sono in numero di tre, i modelli di colore sono sempre riferiti ad uno spazio a tre dimensioni. Nei modelli di colore di tipo additivo vengono individuati tre assi coordinati, ciascuno corrispondente ad un colore base, e mediante miscelazione di tre corrispondenti fasci luminosi, si possono ottenere tutti i colori appartenenti ad un volume (gamut) individuato da tali assi. I tre colori base sono scelti in maniera arbitraria o, più spesso, sulla base del campo di applicazione (es., colore di una terna di fosfori o di laser). Nei processi di stampa si usano modelli di tipo sottrattivo, nei quali si parte da una superficie bianca e si usano inchiostri primari per sottrarre colore dal bianco.
Nota:
In Processing color è un tipo primitivo usato per
specificare il colore. E' realizzato mediante un numero di 32
bit, in cui il primo byte specifica il valore alpha, e gli
altri byte successivi specificano una terna nel modello RGB o
in quello HSB. La scelta di un modello piuttosto che
dell'altro è fatta mediante la funzione
colorMode(). I colori rappresentabili mediante
tre byte sono in numero di
Modello RGB
I colori si rappresentano con una terna di numeri, ciascuno
rappresentante rispettivamente le intensità dei colori primari
rosso (Red), verde (Green), e blu (Blue). Ciascun numero può
essere un intero senza segno e quindi assumere valori tra 0 e
255, oppure essere espresso come un numero floating point
compreso tra 0 e 1.0. Queste possibilità possono essere
specificate mediante la funzione colorMode(). Il
modello RGB è di tipo additivo.
Modello HSB
I colori si rappresentano con una terna di numeri, ciascuno rappresentante rispettivamente la tinta o lunghezza d'onda dominante(Hue), la saturazione (Saturation), e l'intensità o brillantezza (Brightness).
Nota:
| Gimp color chooser |
|---|
![]() |
Alpha channel
E' un byte di informazione usato per effettuare
interpolazione tra immagini, ad esempio allo scopo di rendere
la trasparenza. Esso si può ottenere, da una variabile di tipo
color, con il metodo alpha(). La
manipolazione dell'alpha channel si svolge mediante il metodo
blend() della classe PImage.
Esempio 2: Caricamento e visualizzazione di una immagine con trasparenza
|
|
In Processing, è possibile assegnare un colore ad una
variabile di tipo color mediante la funzione
color(), essendo il modello precedentemente stato
definito mediante colorMode(). Le funzioni
red(), green(), blue(),
hue(), saturation(), e
brightness() consentono di passare da un modello
all'altro.
colorMode(RGB);
color c1 = color(102, 30,29);
colorMode(HSB);
color c2 = color(hue(c1), saturation(c1), brightness(c1));
colorMode(RGB);
color c3 = color(red(c2), green(c2), blue(c2));
// le variabili c1, c2, c3 contengono codifica dello stesso colore
Tinteggiatura di una immagine
Una immagine può
essere tinteggiata con un colore e resa più o meno trasparente
mediante assegnazione di un valore alpha. La funzione da usare
a questo scopo è tint(). Ad esempio, per dare un
tono blu all'immagine incastonata nel Esempio 1, è sufficiente far precedere il
secondo comando image() da tint(0, 153, 204,
126) .
Traslazioni, Rotazioni, e Trasformazioni di Scala
Rappresentazione di Punti e Vettori
In computer graphics, punti e vettori sono rappresentati in
- Definition 1: Coordinate Omogenee
- quaterne di numeri, in cui i primi tre vanno letti nello spazio X-Y-Z, mentre il quarto denota un vettore se assume valore 0, e denota un punto se assume valore 1.
Traslazioni
La funzione translate() consente di spostare
oggetti sulla finestra di immagine. Ammette due o tre
argomenti, che sono rispettivamente gli spostamenti lungo le
direzioni
Rotazioni
In due dimensioni, la funzione
rotate() consente di ruotare oggetti sulla
finestra di immagine. Ciò avviene mediante una moltiplicazione
(a sinistra) delle coordinate di ciascun pixel dell'oggetto
non ruotato per una matrice di rotazione. La rotazione avviene
sempre rispetto all'angolo superiore sinistro (coordinate
rotate(PI/3) prima del secondo comando
image() in Esempio 1. In tre
dimensioni, si possono usare le rotazioni elementari rispetto agli
assi coordinati rotateX(), rotateY(), e
rotateZ().
Trasformazioni di Scala
La
funzione scale() consente di espandere o
contrarre un oggetto mediante moltiplicazione per una costante
delle coordinate dei punti che lo compongono. Se invocata con
due o tre parametri, gli scalamenti possono anche essere
diversi lungo i diversi assi cartesiani.
Elementi tipografici
Ogni strumento o linguaggio per la manipolazione di media offre anche la possibilità di lavorare con la parola scritta e con i suoi elementi visuali fondamentali: i caratteri tipografici.
L'aspetto di un tipo di carattere ha due componenti principali: il font e la dimensione.
Processing mette a disposizione la
classe PFont ed i metodi loadFont()
(per caricare un font ed assegnarlo ad un oggetto di classe
PFont) e textFont() (per attivare un
font con una specifica dimensione). Per poter essere caricato,
il font deve essere stato precedentemente inserito nella
directory data dello sketch corrente. Il tool
Create Font, accessibile dal menu
Tools di Processing, consente di creare le bitmap
dei caratteri che si andranno ad usare e ne colloca il file
relativo nella directory data. In seguito a
queste operazioni preliminari, il font può essere usato per
scrivere del testo, usando la funzione
text(). Questa consente di collocare una stringa
di caratteri nello spazio bidimensionale o tridimensionale,
eventualmente inserendola all'interno di una box
rettangolare. L'allineamento dei caratteri all'interno della
box è governato dalla textAlign(). Nella
configurazione di default, il testo scritto può essere
sottoposto a trasformazioni spaziali come ogni altro
oggetto. Se però si vogliono avere caratteri di alta qualità
bisogna usare la direttiva textMode(SCREEN), la
quale li colloca nella finestra immagine alla dimensione piena
con cui sono stati creati. Per quanto riguarda il colore dei
caratteri, esso può essere impresso con la funzione
fill(), come per ogni altro oggetto grafico.
Esempio 3: Sovrapposizione di scritte
|
|
Processing consente anche un controllo
completo dell'occupazione spaziale dei caratteri e della
distanza tra caratteri contigui. La funzione
textWidth() calcola l'estensione orizzontale di
una carattere o di una stringa. Essa può essere usata, insieme
alle coordinate esatte di posizionamento passate alla
text(), per controllare il kerning ed
il tracking
tra caratteri. La textSize() consente di
ridefinire la dimensione dei caratteri. La
textLeading() ridefinisce la distanza in pixel
tra linee contigue di testo. Questa distanza si misura tra le
baseline su cui si adagiano le stringhe
di caratteri. Lettere quali "p" o "q" si estendono al di sotto
della baseline per una quantità di pixel calcolabile con
textDescent(). Invece, la
textAscent() restituisce l'estensione massima al
di sopra della baseline (tipicamente, l'altezza della lettera
"d").



Media Representation in Processing (english version)




