Académique Documents
Professionnel Documents
Culture Documents
2
Les images
3
Les images
Processing peut
charger des images bitmap de format JPEG, PNG et GIF et des images
vectorielles de format SVG
et les enregistrer sous différents formats JPEG, PNG,GIF, TIFF, SVG, …
Pour utiliser une image, on la fait glisser dans le sketch ou à partir de
Sketch/Ajouter un fichier, Processing crée alors un sous-dossier data à
l'intérieur du dossier du sketch où il dépose cette image
L’importation et l’affichage d'une image bitmap (vectorielle) sous
Processing se fait en deux étapes
utilisation de la méthode loadImage() (loadShape()) pour importer une
image bitamp (vectorielle)
utilisation de la méthode image() (shape()) pour afficher l'image importée
4
Charger et afficher des images bitmap
Sauvegarde: monImage.save(”imagecopy.jpg”);
5
Etapes nécessaires pour charger et afficher une image bitmap
Image bitmap - Exemple 1
PImage img;
float intervalleX, intervalleY;
void setup(){
size(600,600);
img = loadImage("Cartoon.png");
intervalleX = width/5;
intervalleY = height/5;
}
void draw(){//répéter l'image 5 fois horizontalement
et verticalement
for(int i = 0 ; i < 5 ; i ++){
for(int j = 0 ; j < 5 ; j ++){
image(img, i*intervalleX, j*intervalleY,
intervalleX, intervalleY); } }
} 7
Pour animer (déplacer) une
image, il suffit de faire varier sa
Image bitmap – Exemple 3 position dans la méthode draw()
void setup() {
size(740, 460);
forme = loadShape("image.svg");
}
void draw(){
background(102);
shape(forme, 110, 90, 100, 100);
shape(forme, 280, 40);
}
9
Changer la taille d’une image bitmap
Pour créer une image vectorielle au format SVG, on peut suivre les
étapes suivantes :
Importer la bibliothèque SVG dans le sketch :
import processing.svg.*;
Dessiner des formes vectorielles que l’on souhaite inclure dans notre
image SVG en utilisant les fonctions de dessin habituelles de
Processing, telles que ellipse(), rect(), line(), etc
Commencer et terminer l'enregistrement SVG : avant de dessiner
vos formes, appelez beginRecord(SVG, "nom-de-votre-image.svg")
pour commencer l'enregistrement de l'image SVG. Après avoir
dessiné toutes les formes, utilisez endRecord() pour terminer
l'enregistrement. 14
Exemple 1
void setup() {
size(400,400);
}
void draw() {
beginRecord(SVG, "image.svg");//démarre l’enregistrement
//au format SVG de l'image que nous nommerons image.svg
for(int a=50;a<350;a+=25){
fill(a,a,a);
ellipse(a, a, 100,100);
}
endRecord();//Interrompre l’enregistrement
15
}
Exemple 2 - pdf
PImage monImage;
void setup(){ size(250,250);
background(255); // fond blanc
monImage = loadImage("Cartoon.png");
noLoop();//pour que la méthode draw( s'exécute une seule fois
}
void draw(){
tint(50,150,55) ; // teinte verte
image(monImage,25, 25, 100, 100);
tint(50,150,55,170); // teinte verte avec transparence
image(monImage,125, 25, 100, 100);
tint(255,255,255,127); // couleurs d'origine avec transparence
image(monImage,25, 125, 100, 100);
noTint(); // annulation de l'effet de tint()
image(monImage, 125, 125, 100, 100);}
19
Récupérer un pixel d’une image
Le pixel de
coordonnées x=3 et
y=1 aura pour
indice 610 pour une
image de 607 pixels
de large 3 + 1*607
= 610
La formule permettant de passer des coordonnées à l'index est :
21
(abscisse) +(ordonnée *largeur de l'image)
x
0 M
0
Colorier les pixels d’une image y
indice = y × MonImage.width + x N
24
Exemple – Modification de couleur
void setup() {
size(400, 400);
monImage = loadImage("bateau.jpg"); // Charge l'image
depuis le dossier du sketch
monImage.loadPixels(); // Charge les pixels de l'image dans
un tableau
background(255); // Fond blanc
image(monImage, 0, 0); // Affiche l'image d'origine
noLoop(); // Arrête la boucle draw
}
25
Exemple – Modification de couleur
void draw() {
// Parcours tous les pixels de l'image
for (int x = 0; x < monImage.width; x++) {
for (int y = 0; y < monImage.height; y++) {
int index = x + y * monImage.width;// Calcule l'indice du pixel
color pixelColor = monImage.pixels[index];// Récupère la
couleur du pixel
// Modifie la couleur du pixel en inversant ses composantes rouge et bleue
float r = red(pixelColor); float g = green(pixelColor);
float b = blue(pixelColor);
color nouvelleCouleur = color(b, g, r);
monImage.pixels[index] = nouvelleCouleur; // Applique la
nouvelle couleur au pixel
} }
monImage.updatePixels();// Màj l'affichage avec les nouveaux pixels
image(monImage, 0, 0); // Affiche l'image modifiée
26
}
Exemple 2 - Symétrie
PImage imageOriginale;
PImage imageSymetrique;
void setup() {
size(400, 400);
imageOriginale = loadImage("Pelican.jpg"); // Chargez votre
image d'origine
imageSymetrique = createImage(imageOriginale.width,
imageOriginale.height, RGB);
imageMode(CENTER);}
void draw() {
background(255);
// Parcourez les pixels de l'image d'origine et copiez-les
dans l'image symétrique avec inversion verticale
imageOriginale.loadPixels();
imageSymetrique.loadPixels();
27
Exemple 2 - Symétrie
PImage image;
float angle = 0;
float x = 200; // Position horizontale de l'image
float y = 200; // Position verticale de l'image
float scaleFactor = 1.0; // Facteur d'échelle initial
float scaleDirection = 0.01; // Direction et vitesse d'échelle
void setup() {
size(800, 800);
image = loadImage("Pelican.jpg"); // Chargez votre image
imageMode(CENTER);
}
29
Exemple 4 3 – Mise à l’echelle
31
La bibliothèque minim
void setup() {
// Initialisation de la bibliothèque Minim
minim = new Minim(this);
void keyPressed() {
if (key == 'c' | key == 'C')
{// jouer le son si la touche 'c' ou 'C' est pressée
music.play();
} else if (key == 'p' || key == 'P') {
// Mettre en pause le son si la touche 'p' ou 'P' est pressée
music.pause();
} else if (key == 's' || key == 'S') {
// Arrêter le son si la touche 's' ou 'S' est pressée
music.close();
} else if (key == 'r' || key == 'R') {
// Rembobiner le son si la touche 'r' ou 'R' est pressée
music.rewind(); }
}
if (key == ' ') {
// Commencez ou reprenez la lecture audio
if (!player.isPlaying()) { player.play(); }
37
}
AudioInput, AudioRecorder
39
Exemple - AudioRecorder
// ENREGISTRER UNE CAPTATION SONORE
import ddf.minim.* ;
Minim son ;
AudioInput entree ; // Déclaration d'une entrée audio
AudioRecorder cassette ;
void setup() {
size (500,200) ;
background (0);
fill (255) ;
smooth() ;
// Objets pour manipuler les données Audio
son = new Minim(this) ;
// Initialisation de l'entrée audio
entree = son.getLineIn (Minim.STEREO, 2048) ; // (Type d'entrée,
//taille de la mémoire tampon)
cassette = son.createRecorder (entree, "tube.wav", true) ;
// (Source, nom du fichier à enregistrer, usage du tampon ou non)
} 40
Exemple - AudioRecorder
void draw() {
// Visualiser l'enregistrement
if (cassette.isRecording()) {
fill(255,0,0) ; }
else {
fill(100,255,0) ; }
ellipse(250,100,100,100) ; }
void keyPressed() {
if (key == 'b') { cassette.beginRecord(); }
if (key == 'e') { cassette.endRecord(); }
if (key == 's') { cassette.save(); }
}
void stop() {
entree.close() ;
son.stop() ;
super.stop() ;
}
41
Intégration d’une séquence vidéo
42
saveFrame() – générer un fichier vidéo
Pour générer un fichier vidéo, ouvrir l’outil Movie Maker, accessible puis
le menu Tools > Movie Maker de Processing
Pour indiquer à Processing quelle séquence d’images il doit assembler,
nous allons utiliser le premier sélecteur de fichier en le faisant pointer sur
le dossier qui contient les images, qui sera en général le dossier de votre
sketch
Une fois cette opération effectuée, il est possible de configurer les
paramètres de notre vidéo
sa taille par les paramètres width et height qui peuvent être différents de la taille originelle
de vos images
le nombre d’images par seconde ou Frame Rate qui va influer sur la fluidité de la vidéo et
sa durée finale
le type de Compression qui influe sur la qualité finale de la vidéo et de manière implicite 43 la
taille en Mo sur votre disque
saveFrame() – générer un fichier vidéo
44