traitement_image
.data
.le_cri.jpg
.data
est apparu, avec une copie de l’image.cri
de type PImage
en tête de fichier.le_cri.jpg
dans la variable cri
: void setup() {...}
, cri = loadImage("le_cri.jpg");
cri
à l’origine de l’animation : void setup() {...}
,image(cri, 0, 0);
Les variables de type PImage
ont des attributs. Parmi eux :
width
height
On y accède avec :
cri.width
cri.height
En affichant ces deux valeurs avec println
, nous pouvons fixer la taille
parfaite de notre animation (avec size
).
loadPixels()
charge la variable « magique » pixels
(pas besoin de la déclarer).pixels
est un tableau à une dimension,pixels[n]
est le n+1ème pixel,pixels.length
est la taille de pixels
.pixels[0]
donne -9815765
???println(hex(pixels[0]));
println(red(pixels[0]));
println(green(pixels[0]));
println(blue(pixels[0]));
println(hex(red(pixels[0])));
println(hex(green(pixels[0])));
println(hex(blue(pixels[0])));
Questions :
x
et y
d’un pixel, quelle valeur donner à n
pour que pixels[n]
contienne les informations du pixel de coordonnées
(x;y)
?void draw() {...}
.for (int i = 0; i < pixels.length; i++) {
...
}
updatePixels();
Ici, la variable entière est déclarée et initialisée dans l’instruction for
.
Le code placé sur les points de suspension sera exécuté, puis i
va être
incrémentée (i++
) tant qu’elle sera strictement plus petite que la taille du
tableau (i < pixels.length
).
À chaque tour, pixels[i]
sera un des pixels de l’animation, le i+1ème.
L’instruction updatePixels()
va afficher à l’écran les pixels contenus dans
pixels
.
À la place des ...
, affectez à pixels[i]
la valeur color(0)
.
Essayez une autre valeur que 0.
À la place des ...
, affectez à pixels[i]
la valeur color(m)
ou m
est
la moyenne des canaux rouge, vert et bleu.
On peut aussi ne permettre que deux niveaux de gris : 0 (noir) et 255 (blanc).
Utilisez une instruction conditionnelle (if
) et testez quelques seuils.
DÉFI : programmer le réglage du seuil à la souris.
À la place des ...
, affectez à pixels[i]
la valeur color(x)
ou x
est
un des canal (rouge, vert ou bleu).
Réalisez un filtre sépia.
Afficher une image réduite de l’originale dans le coin en haut à gauche.
Recopier les pixels de pixels
, mais dans le sens inverse avec cette boucle :
for (int i = 0; i < pixels.length; i++) {
pixels[i] = pixels[taille - 1 - i]
}
// où `taille` est le nombre de pixels de votre image
Que se passe-t-il ? Pourquoi ?
color[] nouveaux_pixels;
setup
avec :nouveau_pixels = new color[taille];
taille
est le nombre de pixels de votre image.pixels
dans nouveaux_pixels
dans une première boucle.nouveaux_pixels
dans pixels
dans une seconde boucle.updatePixels();
.Pourrez-vous coder :
A suivre...