Update 3/4 séance 19/05/2014

Code de certaines fonctions.
This commit is contained in:
LuKiLL 2014-05-19 11:40:08 +02:00
parent 1f5f2f9c91
commit f06c222fa7
1 changed files with 100 additions and 76 deletions

View File

@ -33,43 +33,40 @@ int importer(Image entree, Image &sortie, string nomFichier, int x, int y) {
}
// Couleur
int rvbVersTsl(Pixel entree, Pixel &sortie) {
TSLcouleur tslcouleur;
float r = (float) entree.r/entree.maxComposante;
float v = (float) entree.v/entree.maxComposante;
float b = (float) entree.b/entree.maxComposante;
float min = (r < v < b ? || (v < r && v < b ? b b || v));
float max = (r > v > b ? || (v > r && v > b ? b b || v));
float s, h, l;
if max == min
s = 0
h = Number.NaN
else
s = if l < 0.5 then (max - min) / (max + min) else (max - min) / (2 - max - min)
if r == max then h = (g - b) / (max - min)
else if (g == max) then h = 2 + (b - r) / (max - min)
else if (b == max) then h = 4 + (r - g) / (max - min)
h *= 60;
h += 360 if h < 0
[h,s,l]
}
int teinte(Image entree, Image &sortie, float teinte) { // Change la teinte de l'image
// Si la teinte appartient à [0;1[
// r1 = 0
// r2 = 1
// v1 = 1
// v2 = 2
// b1 = 2
// b2 = 0
// Valeur = Teinte
// Sinon Si la teinte appartient à [1;2[
// r1 = 1
// r2 = 2
// v1 = 2
// v2 = 0
// b1 = 0
// b2 = 1
// Valeur = Teinte-1
// Sinon Si la teinte appartient à [2;3]
// r1 = 2
// r2 = 0
// v1 = 0
// v2 = 1
// b1 = 1
// b2 = 2
// Valeur = Teinte-2
// Fin Si
// Pour x=0 à x=image.getDimensionX()
// Pour y=0 à y=image.getDimensionY()
//
//
//
// pixel.r = r1+(r2-r1)*valeur
// pixel.v = v1+(v2-v1)*valeur
// pixel.b = b1+(b2-b1)*valeur
// Fin Pour
// Fin Pour
return 1;
for (int x=0, x = image.g_DimensionX(), x++) {
for (int y=0, y = image.g_DimensionY(), y++) {
rvbVersTsl();
g_pixel(x, y);
}
}
return 1;
}
int saturation(Image entree, Image &sortie, float saturation) { // Sature l'image
@ -119,22 +116,22 @@ int contraste(Image entree, Image &sortie, float contraste) { // Accentue les co
}
// Dessin
int trait(Image entree, Image &sortie, int x1, int y1, int x2, int y2, Pixel pixel) { // Dessine un trait d'un point (x1,y1) à un point (x2,y2)
// int x, y, dx, dy ;
// float e, e(1,0), e(0,1) ; // valeur derreur et incréments
// dy ← y2 - y1 ;
// dx ← x2 - x1 ;
// y ← y1 ; // rangée initiale
// e ← 0,0 ; // valeur derreur initiale
// e(1,0) ← dy / dx ;
// e(0,1) ← -1.0 ;
// pour x variant de x1 jusquà x2 par incrément de 1 faire
// tracerPixel(x, y) ;
// si (e ← e + e(1,0)) ≥ 0,5 alors // erreur pour le pixel suivant de même rangée
// y ← y + 1 ; // choisir plutôt le pixel suivant dans la rangée supérieure
// e ← e + e(0,1) ; // ajuste lerreur commise dans cette nouvelle rangée
// fin si ;
// fin pour ;
int trait(Image entree, Image &sortie, int x1, int y1, int x2, int y2, Pixel couleur) { // Dessine un trait d'un point (x1,y1) à un point (x2,y2)
int x, y, dx, dy;
float e, e(1,0), e(0,1) ; // valeur derreur et incréments
dy = y2 - y1 ;
dx = x2 - x1 ;
y = y1 ; // rangée initiale
e = 0,0 ; // valeur derreur initiale
e(1,0) = dy / dx ;
e(0,1) = -1.0 ;
for (x = x1, x = x2, x++) {
sortie.s_pixel(x, y, couleur);
if ((e = e + e(1,0)) >= 0,5) { // erreur pour le pixel suivant de même rangée
y = y + 1 ; // choisir plutôt le pixel suivant dans la rangée supérieure
e = e + e(0,1) ; // ajuste lerreur commise dans cette nouvelle rangée
}
}
return 1;
}
@ -151,26 +148,27 @@ int rectangle(Image entree, Image &sortie, int x1, int y1, int x2, int y2, Pixel
}
int cercle(Image entree, Image &sortie, int x0, int y0, int r, Pixel couleur) {
// sortie=entree;
// pour x=0 à x=image.g_dimensionX()
// pour y=0 à y=image.g_dimensionY()
// si sqrt(pow(x-x0, 2) + pow(y-y0, 2)) == r
// sortie.s_pixel(x, y, couleur);
// Fin si
// fin pour
// fin pour
sortie=entree;
for (int x=0, x=image.g_dimensionX(), x++) {
for (int y=0, y=image.g_dimensionY(), y++) {
if (sqrt(pow(x-x0, 2) + pow(y-y0, 2)) == r) {
sortie.s_pixel(x, y, couleur);
}
}
}
return 1;
}
int disque(Image entree, Image &sortie, int x, int y, int r, Pixel couleur) {
// sortie=entree;
// pour x=0 à x=image.g_dimensionX()
// pour y=0 à y=image.g_dimensionY()
// si sqrt(pow(x-x0, 2) + pow(y-y0, 2)) <= r
// sortie.s_pixel(x, y, couleur);
// Fin si
// fin pour
// fin pour
sortie=entree;
for (int x=0, x=image.g_dimensionX(), x++) {
for (int y=0, y=image.g_dimensionY(), y++) {
if (sqrt(pow(x-x0, 2) + pow(y-y0, 2)) <= r) {
sortie.s_pixel(x, y, couleur);
}
}
}
return 1;
}
@ -210,12 +208,15 @@ int retourner(Image entree, Image &sortie, int rotation) {
}
int redimensionner(Image entree, Image &sortie, int x1, int x2, int y1, int y2) {
// sortie = *new Image(x2-x1, y2-y1, entree.g_maxComposante(), entree.g_typeComposantes());
// pour x=x1 à x=x2
// pour y=y1 à y=y2
// sortie.s_pixel(x, y, entree.g_pixel(x+x1, y+y1));
// FinPour
// FinPour
sortie = *new Image(x2-x1, y2-y1, entree.g_maxComposante(), entree.g_typeComposantes());
Pixel pixel = entree.g_pixelVide();
for (int x = x1, x <= x2, x++) {
for (int y = y1, y <= y2, y++) {
entree.g_pixel(x+x1, y+y1, pixel);
sortie.s_pixel(x, y, pixel);
}
}
return 1;
}
@ -275,8 +276,31 @@ int convNIV(Image entree, Image &sortie) {
}
int convRVB(Image entree, Image &sortie) {
return 1;
if (entree.g_typeComposantes() == PILG_RVB) {
sortie = entree;
} else {
sortie = *new Image(entree.g_dimensionX(), entree.g_dimensionY(), MAXCOMPOSANTEDEFAUT, PILG_RVB);
Pixel pixelI, pixelF;
pixelF = sortie.g_pixelVide();
for (int x = 0; x <= entree.g_dimensionX(); x++) {
for (int y = 0; y <= entree.g_dimensionY(); y++) {
entree.g_pixel(x, y, pixelI);
switch (entree.g_typeComposantes()) {
case PILG_BIN:
pixelF.g = (pixelI.n ? sortie.g_maxComposante() : 0);
break;
case PILG_RVB:
pixelF.g = (pixelI.r + pixelI.v + pixelI.b) / 3.0 / entree.g_maxComposante() * sortie.g_maxComposante();
break;
default:
return 1;
}
sortie.s_pixel(x, y, pixelF);
}
}
}
return 0;
return 0;
}
//Help