Floyd Steinberg dithering enabled on 24b picture loading... doesn' t give very impressing results on my test picture, however...

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@122 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Adrien Destugues 2008-08-13 18:05:17 +00:00
parent 867ac703ca
commit fce305c1eb

30
op_c.c
View File

@ -1081,12 +1081,13 @@ void Convert_bitmap_24B_to_256_Floyd_Steinberg(Bitmap256 Dest,Bitmap24B Source,i
Rouge=Courant->R; Rouge=Courant->R;
Vert =Courant->V; Vert =Courant->V;
Bleu =Courant->B; Bleu =Courant->B;
// Cherche la couleur correspondant dans la palette et la range dans l'image de destination
*D=TC_Get(tc,Rouge,Vert,Bleu); *D=TC_Get(tc,Rouge,Vert,Bleu);
/*
// Puis on calcule pour chaque composante l'erreur dûe à l'approximation // Puis on calcule pour chaque composante l'erreur dûe à l'approximation
Rouge=Rouge-palette[*D].R; Rouge=palette[*D].R - Rouge;
Vert =Vert -palette[*D].V; Vert =palette[*D].V - Vert;
Bleu =Bleu -palette[*D].B; Bleu =palette[*D].B - Bleu;
// On initialise la quantité d'erreur diffusée // On initialise la quantité d'erreur diffusée
DRouge=Rouge; DRouge=Rouge;
@ -1095,11 +1096,12 @@ void Convert_bitmap_24B_to_256_Floyd_Steinberg(Bitmap256 Dest,Bitmap24B Source,i
// Et dans chaque pixel voisin on propage l'erreur // Et dans chaque pixel voisin on propage l'erreur
// A droite: // A droite:
ERouge=(Rouge*7)/16; ERouge=(Rouge*7)/16.0;
EVert =(Vert *7)/16; EVert =(Vert *7)/16.0;
EBleu =(Bleu *7)/16; EBleu =(Bleu *7)/16.0;
if (Pos_X+1<largeur) if (Pos_X+1<largeur)
{ {
// Valeur_modifiee fait la somme des 2 params en bornant sur [0,255]
C_plus1->R=Valeur_modifiee(C_plus1->R,ERouge); C_plus1->R=Valeur_modifiee(C_plus1->R,ERouge);
C_plus1->V=Valeur_modifiee(C_plus1->V,EVert ); C_plus1->V=Valeur_modifiee(C_plus1->V,EVert );
C_plus1->B=Valeur_modifiee(C_plus1->B,EBleu ); C_plus1->B=Valeur_modifiee(C_plus1->B,EBleu );
@ -1110,9 +1112,9 @@ void Convert_bitmap_24B_to_256_Floyd_Steinberg(Bitmap256 Dest,Bitmap24B Source,i
// En bas à gauche: // En bas à gauche:
if (Pos_Y+1<hauteur) if (Pos_Y+1<hauteur)
{ {
ERouge=(Rouge*3)/16; ERouge=(Rouge*3)/16.0;
EVert =(Vert *3)/16; EVert =(Vert *3)/16.0;
EBleu =(Bleu *3)/16; EBleu =(Bleu *3)/16.0;
if (Pos_X>0) if (Pos_X>0)
{ {
S_moins1->R=Valeur_modifiee(S_moins1->R,ERouge); S_moins1->R=Valeur_modifiee(S_moins1->R,ERouge);
@ -1123,9 +1125,9 @@ void Convert_bitmap_24B_to_256_Floyd_Steinberg(Bitmap256 Dest,Bitmap24B Source,i
DVert -=EVert; DVert -=EVert;
DBleu -=EBleu; DBleu -=EBleu;
// En bas: // En bas:
ERouge=(Rouge*4)/16; ERouge=(Rouge/4);
EVert =(Vert *4)/16; EVert =(Vert /4);
EBleu =(Bleu *4)/16; EBleu =(Bleu /4);
Suivant->R=Valeur_modifiee(Suivant->R,ERouge); Suivant->R=Valeur_modifiee(Suivant->R,ERouge);
Suivant->V=Valeur_modifiee(Suivant->V,EVert ); Suivant->V=Valeur_modifiee(Suivant->V,EVert );
Suivant->B=Valeur_modifiee(Suivant->B,EBleu ); Suivant->B=Valeur_modifiee(Suivant->B,EBleu );
@ -1140,7 +1142,7 @@ void Convert_bitmap_24B_to_256_Floyd_Steinberg(Bitmap256 Dest,Bitmap24B Source,i
S_plus1->B=Valeur_modifiee(S_plus1->B,DBleu ); S_plus1->B=Valeur_modifiee(S_plus1->B,DBleu );
} }
} }
*/
// On passe au pixel suivant : // On passe au pixel suivant :
Courant++; Courant++;
C_plus1++; C_plus1++;