Geoffrey Frogeye
a618bdaf42
Les fonctions sont accessibles en mode testing mais leur commande n'est pas intégrée. * Traitement d'image * Ajout de la fonction trait() (algorithme original), de retourner() et de convRVB() * Correction des fonctions cercle(), disque() et redimensionner() * Utilitaires * Ajout d'un fichier de log (PILG-log.txt), pour éviter de surcharger la console, et fonctionner même en mode RELEASE * Déplacement de afficherImage() depuis analyserCommande.cpp * Ajout d'une constante ECHELLE à afficherImage() pour zoomer l'affichage * Objet Image * Correction d'une inversion X/Y visible sur des images plus hautes que large * Mise à jour de TODO.md * Modification des règles de formattage (encore des lignes pour rien)
114 lines
2.6 KiB
C++
114 lines
2.6 KiB
C++
#include "image.h"
|
|
|
|
Image::Image(int dimensionX, int dimensionY, int maxComposante,
|
|
PILG_Comp typeComposantes): m_dimensionX(dimensionX), m_dimensionY(dimensionY),
|
|
m_maxComposante(maxComposante), m_typeComposantes(typeComposantes) {
|
|
Pixel pixelVide = g_pixelVide();
|
|
|
|
for (int xT = 0; xT < dimensionX; xT++) {
|
|
std::vector< Pixel > colonne;
|
|
|
|
for (int yT = 0; yT < dimensionY; yT++) {
|
|
colonne.push_back(pixelVide);
|
|
}
|
|
|
|
m_tab.push_back(colonne);
|
|
}
|
|
}
|
|
|
|
// Getters
|
|
int Image::g_dimensionX() const {
|
|
return m_dimensionX;
|
|
}
|
|
|
|
int Image::g_dimensionY() const {
|
|
return m_dimensionY;
|
|
}
|
|
|
|
PILG_Comp Image::g_typeComposantes() const {
|
|
return m_typeComposantes;
|
|
}
|
|
|
|
int Image::g_maxComposante() const {
|
|
return m_maxComposante;
|
|
}
|
|
|
|
int Image::g_pixel(int x, int y, Pixel &pixel) const {
|
|
if (v_dimensions(x, y)) {
|
|
pixel = m_tab[x][y];
|
|
return 0;
|
|
} else {
|
|
pixel = g_pixelVide();
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
// Setters
|
|
int Image::s_pixel(int x, int y, Pixel pixel) {
|
|
if (v_dimensions(x, y) && v_pixel(pixel)) {
|
|
m_tab[x][y] = pixel;
|
|
return 0;
|
|
} else {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
// Utilitaires
|
|
Pixel Image::g_pixelVide() const {
|
|
Pixel pixel;
|
|
pixel.typeComposantes = m_typeComposantes;
|
|
pixel.maxComposante = m_maxComposante;
|
|
|
|
switch (pixel.typeComposantes) {
|
|
case PILG_BIN:
|
|
pixel.b = false;
|
|
break;
|
|
|
|
case PILG_NIV:
|
|
pixel.g = 0;
|
|
break;
|
|
|
|
case PILG_RVB:
|
|
pixel.r = pixel.v = pixel.b = 0;
|
|
break;
|
|
}
|
|
|
|
return pixel;
|
|
}
|
|
|
|
Image Image::g_vide() const {
|
|
return Image(m_dimensionX, m_dimensionY, m_maxComposante, m_typeComposantes);
|
|
}
|
|
|
|
// Validateurs
|
|
bool Image::v_pixel(Pixel pixel) const {
|
|
if (pixel.typeComposantes == m_typeComposantes
|
|
&& pixel.maxComposante == m_maxComposante) {
|
|
switch (pixel.typeComposantes) {
|
|
case PILG_BIN:
|
|
return true;
|
|
break;
|
|
|
|
case PILG_NIV:
|
|
return (pixel.g <= pixel.maxComposante);
|
|
break;
|
|
|
|
case PILG_RVB:
|
|
return (pixel.r <= pixel.maxComposante
|
|
&& pixel.v <= pixel.maxComposante
|
|
&& pixel.b <= pixel.maxComposante);
|
|
break;
|
|
|
|
default:
|
|
return false;
|
|
break;
|
|
}
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool Image::v_dimensions(int x, int y) const {
|
|
return (x >= 0 && x < m_dimensionX && y >= 0 && y < m_dimensionY);
|
|
}
|