Vous êtes sur la page 1sur 44

Manipulation des images

et de l'audio avec Processing 5

Enseignante: LYNDA FARZA


Académie Militaire
PLAN

1 Click to add title in


Les images

2 Intégration d’une séquence audio

3 Intégration d’une séquence vidéo

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

Création d’un espace de


dessin de taille suffisante size(500,400);
Création d’une variable
monImage de type PImage, PImage monImage;
initialement vide qui va contenir
monImage = loadImage("monImage.jpg");
les données de l’image (en pixels)
Chargement de l’image image(monImage,50,10);
(loadImage()) dans une variable et (draw())
stockage des pixels
(setup()) Dessin des pixels de l’image dans l’espace de travail
Affichage de l’image avec sa taille originale dans
Affichage de l’mage l’espace de dessin en définissant la position (x,y) de
(image(monImage,x,y)) son coin supérieur gauche

Sauvegarde: monImage.save(”imagecopy.jpg”);
5
Etapes nécessaires pour charger et afficher une image bitmap
Image bitmap - Exemple 1

//ce code charge deux images à partir de fichiers (une image


PNG et une image GIF) et les affiche dans une fenêtre
graphique : les images sont positionnées à des coordonnées
spécifiques et redimensionnées pour s'adapter à la fenêtre*/
PImage img1;
PImage img2;
void setup() {
size(630, 300);
img1 = loadImage("Cartoon.png");
img2 = loadImage("Pinocchio.gif");
}
void draw() {
image(img1, 30, 0, 300, 300);
image(img2, 330, 0, 300, 300);
} 6
Image bitmap - Exemple 2

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()

/*Ce code charge une image (nommée "Cartoon.png") et


effectue une animation en faisant glisser cette image
horizontalement sur l'écran*/
PImage monImage ;
int x = 0, pasx = 3;
void setup () { size (800 ,600) ;
monImage = loadImage("Cartoon.png"); }
void draw () {
background (0) ; image(monImage ,x ,100 ,200 ,200) ;
x = x + pasx ;
if (x > width - 200) {
x = width - 200; pasx = -pasx ;
}
if (x < 0) {
x = 0; pasx = -pasx ;
} } 8
Image vectorielle – Exemple

/*ce code charge une forme à partir d'un fichier SVG et


l'affiche deux fois dans la fenêtre graphique. La première
fois, la forme est redimensionnée, et la deuxième fois,
elle est affichée à sa taille d'origine*/
PShape forme;

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 modifier les dimensions d’une image bitmap, il faut rajouter la


largeur et la hauteur : image(monImage, x, y,
nouvellelargeur,nouvellehauteur);
 nom_image représente le nom de la variable dans laquelle a été chargé l’image et x
et y les coordonnées de la position dans le fenêtre du coin haut gauche de l’image
 Pour sélectionner (extraire) une partie spécifique d'une image, on
utilise la fonction get
 nom_image2 = nom_image1.get(x,y,largeurZone,hauteurZone) avec x
et y les coordonnées du point haut gauche de la zone de l’image et
largeurZone et hauteurZonela largeur et la hauteur de la zone en pixels
 Pour ajuster la fenêtre aux dimensions originales de l'image, on
utilise les propriétés width et height
 surface.setSize(monImage.width, monImage.height); 10
Exemple 1
/*ce code charge une image, l'affiche dans sa taille d'origine, puis
affiche une version redimensionnée en dessous. Il permet également de
déplacer l'image à l'emplacement de la souris. La taille de la fenêtre
est automatiquement ajustée à la taille de l'image d'origine.*/
PImage monImage; // variable stockant une image
void setup(){ size(800,600);
//charge l'image dans le dossier data
monImage = loadImage("Cartoon.png");
surface.setSize(monImage.width, monImage.height);
// Ajustez la fenêtre aux dimensions originales de l'image
}
void draw(){ // Affiche l'image d'origine en haut à gauche
image(monImage,0,0);
// Redimensionne l'image pour qu'elle soit plus petite
PImage imageRedimensionnee = monImage.get(0, 0, monImage.width /
2, monImage.height / 2);
image(imageRedimensionnee, 0, monImage.height);
//Modification de la position d’une image 11
image(monImage, mouseX, mouseY, 150,150);}
Exemple 2 - Photomontage

/* ce code charge deux images et les affiche dans la fenêtre


graphique. La première image est affichée dans le coin supérieur
gauche, et la deuxième image est superposée à la première et affichée
légèrement décalée de 100 pixels à droite et 100 pixels en bas */
PImage image1;
PImage image2;
void setup() { size(400, 400);
image1 = loadImage("bateau.jpg");
image2 = loadImage("Pelican.png");}
void draw() { background(255);
// Affichez la première image
image(image1, 0, 0);
// Superposez la deuxième image
image(image2, 100, 100); // Ajustez les coordonnées selon
votre besoin
} 12
Exemple 3 – Translation, Rotation

/* ce code charge une image, l'affiche au centre de la fenêtre, et la


fait tourner progressivement à chaque frame. Cela crée un effet de
rotation de l'image au centre de la fenêtre graphique. */
PImage image;
float angle = 0;
void setup() { size(400, 400);
image = loadImage("Pelican.jpg"); // Chargez votre image
imageMode(CENTER);}
void draw() { background(255);
// Translatez au centre de l'image
translate(width / 2, height / 2);
// Appliquez une rotation à l'image
rotate(radians(angle)); // L'angle doit être en radians
angle += 1; // Augmentez l'angle pour faire tourner l'image
// Affichez l'image rotative
image(image, 0, 0);} 13
Créer une image vectorielle

 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

//création d’une image vectorielle


import processing.svg.*; //Import de la librairie SVG

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

import processing.pdf.*; //utilisation de la bibliothèque PDF de


//Processing pour générer un fichier PDF contenant du texte
PFont f;
void setup() {
size(800, 800);
f = createFont("Georgia", 30);
noLoop();}
void draw() {
beginRecord(PDF, "LiveText.pdf");
background(50);
textFont(f);
textSize(40);
fill(200);
textAlign(CENTER);
text("Ceci est le texte ...", width/2, height/2);
endRecord();} 16
Exemple 3 - pdf

/*ce code génère un fichier PDF qui contient un cercle, une


image et du texte. Le fichier PDF est enregistré dans le
répertoire du sketch avec le nom "mon_fichier.pdf"
*import processing.pdf.*;
PImage img; // Déclaration de la variable pour l'image
void setup() {
size(800, 800);
img = loadImage("I Cartoon.png"); //Charger votre image ici
beginRecord(PDF, "mon_fichier.pdf");
background(255); fill(0);
textSize(24);
text("Mon texte dans le PDF", 100, 100);}
void draw() {
ellipse(300, 300, 200, 200); // Dessiner un cercle
image(img, 400, 400); // Afficher l'image
endRecord(); exit();} 17
Teinter une image bitmap
 On peut faire avec Processing toutes les opérations qu'on fait avec
Photoshop comme changer l’ensemble des couleurs des pixels d’une
image affichée à l'aide de la fonction tint()
 tint(gris) : cette fonction applique une teinte de niveau de gris à l'image, où gris
est un niveau de gris entre 0 et 255
 tint(gris,alpha) : Cette fonction permet de spécifier à la fois le niveau de gris et la
transparence de l'image, le paramètre alpha réglant le niveau de
transparence/opacité de l’image 0 signifie complètement transparent et 255
signifie complètement opaque
 tint(r,v,b) Cette fonction vous permet de spécifier une couleur en mode RVB, où
chaque paramètre est compris entre 0 et 255
 tint(r,v,b,alpha) où chaque paramètre est compris entre 0 et 255, le paramètre
alpha réglant le niveau de transparence
 noTint() pour annuler la teinte précédemment définie et afficher l'image sans
18
modification de couleur
Exemple

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

 Une image est mémorisée comme un tableau de pixels à deux


dimensions, où chaque case contient une couleur
 Récupérer un pixel situé à une position spécifique (i, j) dans une
image, peut se faire simplement, en utilisant l’indice de la case
correspondante
 Exemple
 Une image de 607 pixels de large et 476 pixels de hauteur peut être
considéré comme étant un tableau où chaque case possède un n°
d'identification (index) et contient une couleur
 Pour repérer une case on utilise ses coordonnées (abscisse, ordonnée)
 Le pixel de coordonnées (0,0) a pour indice 0
20
Récupérer un pixel d’une image

La 1ère ligne est la ligne 0 et la 1ère


colonne est la colonne 0

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

N° de la ligne Largeur de l’image (nombre de pixels dans une ligne) N° de la colonne

 Dans Processing, un pixel est un élément de type color


 La fonction color permet d’affecter une couleur RVB à un pixel
pixel= color(R, V, B)
 Les fonctions red, green et blue permettent de récupérer les composantes rouge, verte et
bleue de la couleur d’un pixel : composante_rouge = red(pixel); composanteVerte =
green(pixel); composanteBleue = blue(pixel);
 Le tableau pixels[] contient les couleurs de chaque pixel de l'image affichée
(Ex. : pixels[3] contient la couleur du pixel numéro 4 de l'image)
 Pour accéder à la couleur d’un pixel particulier dans un objet Pimage, on
peut utiliser l'indice du pixel dans le tableau pixels[] :
22
color c = MImage.pixels[indice];
Modifier un pixel d’une image

 Pour créer un objet PImage vide on utilise la méthode createImage()


: PImage monImage = createImage(largeur, hauteur, modeCouleur);
 Pour manipuler directement les pixels composant une image, il faudra
 appeler la méthode loadPixels() qui permet de charger dans un tableau à
une dimension (pixels[] ) tous les pixels de l’image :
monImage.loadPixel();
 elle crée alors le tableau pixels[]
 Accéder et modifier les couleurs des pixels en utilisant l'indice du tableau
pixels[] avec monImage.pixel[indice]; (qui contient une couleur et le
modifier avec par ex. monImage.pixels[indice] = color(R, V, B);)
 et finir avec la méthode updatePixels() pour mettre à jour l'affichage de
l'image après les modifications : onImage.updatePixel() -- Cela rafraîchit
l'image avec les modifications apportées aux pixels 23
Modifier un pixel d’une image

 Si on veut changer la valeur de la couleur d'un pixel , on peut accéder


à l'indice du pixel dans le tableau pixels[], lui attribuer une nouvelle
couleur à l'aide de la méthode color(), puis mettre à jour les pixels
avec la méthode updatePixels()
 Exemple
// Chargez les pixels de l'image monImage.loadPixels();
// Modifiez la couleur d'un pixel spécifique (par exemple, le
pixel à l'indice 3) monImage.pixels[3] = color(10, 45,
90);
// Mettez à jour les pixels pour refléter les modifications
monImage.updatePixels();

24
Exemple – Modification de couleur

PImage monImage; // Déclare une variable pour stocker l'image

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

for (int x = 0; x < imageOriginale.width; x++) {


for (int y = 0; y < imageOriginale.height; y++) {
// Copiez le pixel de l'image d'origine dans l'image
symétrique en inversant la position verticalement
int pixelIndexOrigine = x + y * imageOriginale.width;
int pixelIndexSymetrique = x + (imageOriginale.height -
1 - y) * imageOriginale.width;
imageSymetrique.pixels[pixelIndexSymetrique] =
imageOriginale.pixels[pixelIndexOrigine];
}
}
imageSymetrique.updatePixels();

// Affichez l'image symétrique


image(imageSymetrique, width / 2, height / 2);
28
}
Exemple 3 – Mise à l’echelle

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

void draw() { background(255);


// Translation de l'image en fonction de la position de la souris
x = mouseX; y = mouseY;
// Rotation continue de l'image
angle += radians(1);
// Modification de l'échelle en fonction de la direction
scaleFactor += scaleDirection;
// Inversion de la direction d'échelle lorsque l'échelle
dépasse certaines limites
if (scaleFactor > 2.0 || scaleFactor < 0.5) {
scaleDirection *= -1; }
pushMatrix(); // Sauvegardez la matrice de transformation actuelle
translate(x, y); rotate(angle); scale(scaleFactor);
image(image, 0, 0); // Affichez l'image
popMatrix(); // Restaurez la matrice de transformation précédente
} 30
Intégration d’une séquence audio

31
La bibliothèque minim

 La bibliothèque minim est une bibliothèque très utile pour la lecture et


la manipulation de fichiers audio dans Processing, elle permet de
charger et de lire des fichiers audio dans différents formats (WAV,
AIFF et MP3), ainsi que de capturer l'audio à partir du microphone
 Pour vérifier sa présence et l'intégrer dans un programme, il suffit d'aller dans
le menu Sketch/Import Library/minim cela ajoutera la bibliothèque minim à
notre sketch (import ddf.minim.*; Minim minim;)
 La méthode stop() permet d’arrêter complètement l’instance minim
 La bibliothèque minim est souvent utilisée pour créer des projets
interactifs impliquant de la musique, de l'audio en temps réel, etc.
 Quelques exemples de ce qu’on peut faire avec la bibliothèque minim
 Charger et jouer un fichier audio, appliquer des effets audio, capturer l'audio à
32
partir du microphone, etc.
Utiliser un fichier son

 Pour pouvoir utiliser un fichier dans un programme Processing, il faut


 soit l’importer dans le sketch en utilisant l'option "Ajouter un fichier..."
dans le menu "Sketch" de Processing pour sélectionner le fichier audio
qu’on souhaite utiliser : cette action place le fichier audio dans le dossier
"data" du sketch, ce qui permet à Processing de le trouver facilement
 soit glisser directement le fichier son sur la fenêtre Processing : cette
action place, également, le fichier son dans le dossier "data" du sketch
 soit copier le fichier audio directement dans le dossier "data" de notre
sketch Processing
 On peut, alors, utiliser les classes et les méthodes de la bibliothèque
minim pour lire, manipuler et analyser le fichier audio
 La bibliothèque minim comporte une classe nommée AudioPlayer, qui
permet de charger un fichier son puis de le jouer 33
AudioPlayer

 1ére étape : créer un objet de la classe AudioPlayer qui contiendra les


données audio
 Cela se fait en déclarant une variable de type AudioPlayer, par exemple,
AudioPlayer nomDuSon; : cela crée une instance vide d'AudioPlayer
 2éme étape : charger le fichier audio en utilisant à la méthode
loadFile("nomDuFichierSon.format") au niveau de setup()
 nomDuSon = minim.loadFile("nomDuFichierSon.format"); : Cela
charge le fichier audio "nomDuFichierSon.format" dans l'objet
AudioPlayer nommé nomDuSon
 3éme étape : jouer le son, grâce à la méthode play()
 une fois qu’on a chargé le fichier audio, on peut le lire en utilisant la
méthode play() de notre objet AudioPlayer pour commencer la lecture du
son, par exemple, nomDuSon.play(); 34
Autres méthodes

 La méthode pause() permet de mettre en pause la lecture du son


 La méthode rewind() permet de rembobiner le son au début de la piste
 La méthode close() arrête la lecture audio et libère les ressources
associées à minim et à ses objets, tels que les lecteurs audio
(AudioPlayer) et les enregistreurs audio (AudioRecorder)
 Une fois qu’on arrête une séquence audio en utilisant la méthode close() de l'objet
AudioPlayer, on ne peut pas la redémarrer directement à partir du même objet : la
méthode close() libère toutes les ressources associées à la lecture audio, ce qui
rend l'objet AudioPlayer inutilisable pour la lecture ultérieure
 Pour redémarrer une séquence audio après l'avoir arrêtée, on doit créer un nouvel
objet AudioPlayer et charger à nouveau le fichier audio qu’on souhaite lire
 La méthode loop(n) permet de lire n fois le fichier son où n est le
nombre de fois qu’on souhaite que le son soit répété
Exemple - AudioPlayer
// Charger le fichier audio
// Import de la librairie
import ddf.minim.*;
//Déclaration d'un objet de la classe Minim
Minim minim;

// Déclaration d'un objet de la classe AudioPlayer


AudioPlayer music; AudioPlayer player;

void setup() {
// Initialisation de la bibliothèque Minim
minim = new Minim(this);

// Chargement du fichier audio depuis le dossier "data" dans


l'objet AudioPlayer grâce la méthode loadFile de la classe Minim
music= minim.loadFile("audio.mp3");
player = minim.loadFile("audio.mp3");}
void draw() { background(220);} 36
Exemple - AudioPlayer

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

 La bibliothèque minim comporte une classe AudioRecorder qui permet


d'enregistrer des séquences audio; Méthodes associées à la classe :
 createRecorder(): Cette méthode est utilisée pour créer un nouvel objet
AudioRecorder
 Elle prend un seul argument, qui est le nom du fichier dans lequel on souhaite enregistrer le son
 begin(): Cette méthode permet de lancer l'enregistrement audio, une fois qu’on a
créé un enregistreur avec createRecorder() et qu’on est prêt à commencer à
enregistrer
 end(): Cette méthode permet d’arrêter l'enregistrement audio en cours
 Le fichier d'enregistrement sera ensuite fermé et sauvegardé
 getLineIn(): Cette méthode renvoie un objet AudioInput qui représente l'entrée
audio de la ligne d'entrée du système. Vous pouvez utiliser cet objet pour capturer
le son du microphone ou d'autres sources audio externes. Cela peut être utile si
vous souhaitez enregistrer le son provenant d'une source externe plutôt que du
générateur de son interne de Minim. 38
AudioInput, AudioRecorder

 La propriété isRecording(): renvoie true si l'enregistrement est en


cours et false sinon. Vous pouvez l'utiliser pour vérifier si l'enregistreur
est actuellement en train d'enregistrer.

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

 L’option «Same size as originals» permet de caler la largeur et la


hauteur de votre vidéo à la taille des images sauvegardées.
 Enfin, vous pouvez associer à votre vidéo une piste de son en
sélectionnant un fichier de son.
 Une fois tous ces paramètres ajustés, vous pouvez créer la vidéo en
appuyant sur le bouton «Create Movie…», qui vous proposera un
sélecteur de fichiers pour sauvegarder le fichier assemblé. Le temps de
génération sera d’autant plus long que le nombre d’images de la
séquence est important.

44

Vous aimerez peut-être aussi