libimage  0.25.4
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Énumérations Macros Pages
Fonctions membres publiques | Attributs publics | Liste de tous les membres
Référence de la classe Line

Représentation d'une ligne flottante. Plus de détails...

#include <Line.h>

Graphe de collaboration de Line:
Collaboration graph

Fonctions membres publiques

 Line (int width, int samplesize)
 Crée un objet Line à partir de la largeur.
template<typename T >
 Line (T *imageIn, uint8_t *maskIn, int srcSpp, int width, T *transparent)
 Crée un objet Line à partir de données, et précision d'une valeur de transparence.
template<typename T >
 Line (T *imageIn, uint8_t *maskIn, int srcSpp, int width)
 Crée un objet Line à partir de données.
template<typename T >
void store (T *imageIn, uint8_t *maskIn, int srcSpp, T *transparent)
 Stockage des données, avec précision d'une valeur de transparence.
template<typename T >
void store (T *imageIn, uint8_t *maskIn, int srcSpp)
 Stockage des données.
template<typename T >
void write (T *buffer, int outChannels)
 Convertit et écrit la ligne de donnée.
void alphaBlending (Line *above)
 Fusionne deux lignes par transparence (alpha blending)
void multiply (Line *above)
 Fusionne deux lignes par multiplication.
void useMask (Line *above)
 Fusionne deux lignes par masque.
virtual ~Line ()
 Destructeur par défaut.
template<>
void store (uint8_t *imageIn, uint8_t *maskIn, int srcSpp, uint8_t *transparent)
template<>
void store (uint8_t *imageIn, uint8_t *maskIn, int srcSpp)
template<>
void store (uint16_t *imageIn, uint8_t *maskIn, int srcSpp, uint16_t *transparent)
template<>
void store (uint16_t *imageIn, uint8_t *maskIn, int srcSpp)
template<>
void store (float *imageIn, uint8_t *maskIn, int srcSpp, float *transparent)
template<>
void store (float *imageIn, uint8_t *maskIn, int srcSpp)

Attributs publics

float * samples
 Canaux de couleur, sans tenir compte de l'alpha.
float * alpha
 Valeurs d'alpha, entre 0 et 1.
uint8_t * mask
 Masque associé aux données.
float coeff
 Coefficient à appliquer, pour passer à un alpha flottant entre 0 et 1.
int width
 Largeur de la ligne (nombre de pixels)

Description détaillée

Représentation d'une ligne flottante.

Auteur
Institut national de l'information géographique et forestière

Cette classe stocke une ligne d'image sur 4 canaux, 3 pour la couleur et un canal alpha non-associé (pas prémultiplié aux couleurs). Ce fonctionnement est toujours le même, que les canaux sources soient entiers ou flottants. En stockant toujours les informations dans ce format de travail, on va faciliter les calculs de fusion de plusieurs lignes, dont les caractéristiques étaient différentes. Le formattage final sera également facilité.

Cette classe gère les données, que ce soit comme sources ou comme sortie, sur :

La classe travaille toujours sur des flottant, quel que soit le format de base des images lues. Cela permet de faire des calculs flottant, et de ne caster qu'au moment de l'écriture.

Les données peuvent possédé un masque associé, auquel cas il sera stocké en parallèle des données. Quelque soit le mode de fusion utilisé par la suite, on tiendra toujours compte de ce masque.

Les modes de fusion gérés sont :

A faire:

Travailler sur un nombre de canaux variable (pour l'instant, systématiquement 4, que ce soit en entier ou en flottant).

Les modes de fusion DARKEN et LIGHTEN ne sont pas implémentés.

Un pixel correspond toujours à 4 flottants (3 canaux + 1 alpha). Il doit être possible d'utiliser des fonctions SSE pour optimiser les calculs

Represent an image line, with float

Documentation des constructeurs et destructeur

Line::Line ( int  width,
int  samplesize 
)
inline

Crée un objet Line à partir de la largeur.

Il n'y a pas de stockage de données, juste une allocation de la mémoire nécessaire.

Paramètres
[in]widthlargeur de la ligne en pixel
template<typename T >
Line::Line ( T *  imageIn,
uint8_t *  maskIn,
int  srcSpp,
int  width,
T *  transparent 
)
inline

Crée un objet Line à partir de données, et précision d'une valeur de transparence.

Les données sont sockées et les pixels dont la valeur est celle transparente sont stocké avec un alpha nul

Paramètres
[in]imageIndonnées en entrée
[in]maskInmasque associé aux données en entrée
[in]srcSppnombre de canaux dans les données sources
[in]widthlargeur de la ligne en pixel
[in]transparentvaleur des pixels à considéré comme transparent

Voici le graphe d'appel pour cette fonction :

template<typename T >
Line::Line ( T *  imageIn,
uint8_t *  maskIn,
int  srcSpp,
int  width 
)
inline

Crée un objet Line à partir de données.

Paramètres
[in]imageIndonnées en entrée
[in]maskInmasque associé aux données en entrée
[in]srcSppnombre de canux dans les données sources
[in]widthlargeur de la ligne en pixel

Voici le graphe d'appel pour cette fonction :

virtual Line::~Line ( )
inlinevirtual

Destructeur par défaut.

Libération de la mémoire occupée par les tableaux.

Documentation des fonctions membres

void Line::alphaBlending ( Line above)

Fusionne deux lignes par transparence (alpha blending)

La ligne courante est fusionnée avec une ligne par dessus, et le résultat est stocké dans la ligne courante. Rappelons que les valeurs de transparence ne sont pas prémultipliée sur les canaux (en entrée et en sortie).

merge_transparency.png
Paramètres
[in]aboveligne du dessus, avec laquelle fusionner

Voici le graphe des appelants de cette fonction :

void Line::multiply ( Line above)

Fusionne deux lignes par multiplication.

La ligne courante est fusionnée avec une ligne par dessus, et le résultat est stocké dans la ligne courante.

merge_multiply.png
Paramètres
[in]aboveligne du dessus, avec laquelle fusionner

Voici le graphe des appelants de cette fonction :

template<typename T >
void Line::store ( T *  imageIn,
uint8_t *  maskIn,
int  srcSpp,
T *  transparent 
)

Stockage des données, avec précision d'une valeur de transparence.

Les données sont sockées en convertissant le nombre de canaux si besoin est. L'alpha lui est potentiellement converti en flottant entre 0 et 1. Les pixels dont la couleur est celle précisée comme transparent sont "annulés" (alpha = 0). Cette fonction est un template mais n'est implémentée (spécifiée) que pour les entiers sur 8 bits et les flottant.

Paramètres
[in]imageIndonnées en entrée
[in]maskInmasque associé aux données en entrée
[in]srcSppnombre de canaux dans les données sources
[in]widthlargeur de la ligne en pixel
[in]transparentvaleur des pixels à considéré comme transparent

Voici le graphe des appelants de cette fonction :

template<typename T >
void Line::store ( T *  imageIn,
uint8_t *  maskIn,
int  srcSpp 
)

Stockage des données.

Les données sont sockées en convertissant le nombre de canaux si besoin est. L'alpha lui est potentiellement converti en flottant entre 0 et 1. Cette fonction est un template mais n'est implémentée (spécifiée) que pour les entiers sur 8 bits et les flottant.

Paramètres
[in]imageIndonnées en entrée
[in]maskInmasque associé aux données en entrée
[in]srcSppnombre de canux dans les données sources
[in]widthlargeur de la ligne en pixel
void Line::useMask ( Line above)

Fusionne deux lignes par masque.

La ligne courante est fusionnée avec une ligne par dessus, et le résultat est stocké dans la ligne courante.

merge_mask.png
Paramètres
[in]aboveligne du dessus, avec laquelle fusionner

Voici le graphe des appelants de cette fonction :

template<typename T >
void Line::write ( T *  buffer,
int  outChannels 
)

Convertit et écrit la ligne de donnée.

Cette fonction est un template mais n'est implémentée (spécifiée) que pour les entiers sur 8 bits et les flottant.

Paramètres
[in]buffermémoire où écrire la ligne
[in]outChannelsnombre de canaux des données écrites dans le buffer

Voici le graphe des appelants de cette fonction :

Documentation des données membres

float Line::coeff

Coefficient à appliquer, pour passer à un alpha flottant entre 0 et 1.

  • Pour des données sur 8 bits -> 255.
  • Pour des données sur 32 bits (flottant) -> 1.
uint8_t* Line::mask

Masque associé aux données.

  • 0 = non-donnée
  • 1 -> 255 = donnée

La documentation de cette classe a été générée à partir des fichiers suivants :