Documentation de la bibliothèque MLV-3.1.0

advanced/07_transparency.c

Ce programme montre quelques exemples d'utilisation de la transparence.

Nous rapellons que les couleurs sont codées à l'aide de 4 composantes:

codées chacune sur un octet, c'est à dire par un entier comprit entre 0 et 256.

La transparence joue un role lorsque une image est dessinée à l'écran ou sur une autre image. Lorsque l'on copie une image, les pixels du résultat final sont obtenus en faisant le barycentre entre le pixel de l'image source avec celui de l'image destination. Les poids des barycentres sont définis par la composante transparence ( composante alpha ) de l'image source. La transparence de l'image destination reste inchangée.

Cela nous donne les formules suivantes:

R_dest = (alpha_src/256) * R_src + (1- alpha_src/256) * R_dst
V_dest = (alpha_src/256) * V_src + (1- alpha_src/256) * V_dst
B_dest = (alpha_src/256) * B_src + (1- alpha_src/256) * B_dst
A_dest = A_dest

Ainsi, si l'a composante alpha de l'image source est à 0, alors la source disparait. Si elle à est 256, alors c'est l'image destination qui disparait.

Voici un exiemple avec les couleurs suivantes:

Comme la composante alpha est à 128, la couleur finale est donc à moitié celle de l'image source (128/256) et à moitié celle de l'image destination (1-128/256).

#include <MLV/MLV_all.h>
//
// Attention !
// Pour pouvoir compiler ce programme sous windows et sous macintosh,
// il faut, pour la déclaration du main, respecter strictement la syntaxe
// suivante :
//
int main( int argc, char *argv[] ){
int width = 640, height = 480;
MLV_Image *red_image, *blue_image;
//
// Créé et affiche la fenêtre
//
"advanced - 7 - transparency", "transparency", width, height
);
//
// Lit un fichier et charge l'image contenu dans le
// fichier en mémoire.
//
blue_image = MLV_load_image( "blue_image.png" );
red_image = MLV_load_image( "red_image.png" );
100, 40, "avec la composante\nalpha d'origine", 4,
);
//
// Affiche l'image
//
MLV_draw_image( blue_image, 47, 113 );
MLV_draw_image( red_image, 47, 306 );
//
// Affiche l'image
//
MLV_draw_image( blue_image, 187, 185 );
MLV_draw_image( red_image, 187, 234 );
//
// Suprime la transparence de l'image et la remplace
// par une transparence uniforme opaque
//
MLV_set_alpha_on_image( MLV_ALPHA_OPAQUE, red_image );
MLV_set_alpha_on_image( MLV_ALPHA_OPAQUE, blue_image );
330, 20, "sans la\ncomposante\nalpha", 4,
);
//
// Affiche l'image
//
MLV_draw_image( blue_image, 328, 113 );
MLV_draw_image( red_image, 328, 306 );
//
// Suprime la transparence de l'image et la remplace
// par une transparence uniforme
//
MLV_set_alpha_on_image( 127, red_image );
MLV_set_alpha_on_image( 127, blue_image );
435, 20, "la composante alpha\nest remplacée par une\ncomposante uniforme", 4,
);
//
// Affiche l'image
//
MLV_draw_image( blue_image, 468, 113 );
MLV_draw_image( red_image, 468, 306 );
//
// Met à jour l'affichage
//
//
// Attend 2 secondes
//
//
// Libère l'image qui a été crée
//
MLV_free_image( blue_image );
MLV_free_image( red_image );
//
// Ferme la fenêtre
//
return 0;
}
/*
* This file is part of the MLV Library.
*
* Copyright (C) 2010,2011,2012,2013 Adrien Boussicault, Marc Zipstein
*
*
* This Library is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This Library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this Library. If not, see <http://www.gnu.org/licenses/>.
*/
MLV_create_window
void MLV_create_window(const char *window_name, const char *icone_name, unsigned int width, unsigned int height)
Créé une fenêtre dont la taille, et les différents noms sont passés en paramètres.
MLV_load_image
MLV_Image * MLV_load_image(const char *file_image)
Charge en mémoire une image contenue dans un fichier.
MLV_free_window
void MLV_free_window()
Ferme la fenêtre de la bibliothèque MLV.
MLV_draw_image
void MLV_draw_image(const MLV_Image *image, int x, int y)
Dessine une image donnée à une position donnée de la fenêtre.
MLV_update_window
void MLV_update_window()
Met à jour l'affichage de la fenêtre.
MLV_wait_seconds
void MLV_wait_seconds(int seconds)
Le programme s'intérompt pendant un nombre de secondes.
MLV_TEXT_CENTER
@ MLV_TEXT_CENTER
Definition: MLV_text.h:45
MLV_Image
struct _MLV_Image MLV_Image
Définit le type Image dans la bibliothèque MLV.
Definition: MLV_image.h:53
MLV_COLOR_GREEN
#define MLV_COLOR_GREEN
Definition: MLV_color.h:931
MLV_all.h
Fichier d'entête principal incluant tous les autres fichiers entêtes de la bibliothèque MLV.
MLV_clear_window
void MLV_clear_window(MLV_Color color)
Éfface la fenêtre et la remplace par un monochrome de la couleur donnée en paramètre.
MLV_draw_adapted_text_box
void MLV_draw_adapted_text_box(int x, int y, const char *message, int sizeInterligne, MLV_Color borderColor, MLV_Color textColor, MLV_Color backgroundColor, MLV_Text_justification text_justification,...)
Dessine une boîte contenant du texte.
MLV_free_image
void MLV_free_image(MLV_Image *image)
Libère la mémoire utilisée par l'image.
MLV_COLOR_BLACK
#define MLV_COLOR_BLACK
Definition: MLV_color.h:379
MLV_set_alpha_on_image
void MLV_set_alpha_on_image(MLV_Alpha alpha, MLV_Image *image)
La composante alpha de l'image est remplacée par une composante alpha homogène dont la valeur est don...