From fce305c1ebc09b92a725073a1b7e571df40bdae8 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Wed, 13 Aug 2008 18:05:17 +0000 Subject: [PATCH] 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 --- op_c.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/op_c.c b/op_c.c index 8687818b..e280107a 100644 --- a/op_c.c +++ b/op_c.c @@ -1081,12 +1081,13 @@ void Convert_bitmap_24B_to_256_Floyd_Steinberg(Bitmap256 Dest,Bitmap24B Source,i Rouge=Courant->R; Vert =Courant->V; 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); -/* + // Puis on calcule pour chaque composante l'erreur dûe à l'approximation - Rouge=Rouge-palette[*D].R; - Vert =Vert -palette[*D].V; - Bleu =Bleu -palette[*D].B; + Rouge=palette[*D].R - Rouge; + Vert =palette[*D].V - Vert; + Bleu =palette[*D].B - Bleu; // On initialise la quantité d'erreur diffusée 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 // A droite: - ERouge=(Rouge*7)/16; - EVert =(Vert *7)/16; - EBleu =(Bleu *7)/16; + ERouge=(Rouge*7)/16.0; + EVert =(Vert *7)/16.0; + EBleu =(Bleu *7)/16.0; if (Pos_X+1R=Valeur_modifiee(C_plus1->R,ERouge); C_plus1->V=Valeur_modifiee(C_plus1->V,EVert ); 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: if (Pos_Y+10) { 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; DBleu -=EBleu; // En bas: - ERouge=(Rouge*4)/16; - EVert =(Vert *4)/16; - EBleu =(Bleu *4)/16; + ERouge=(Rouge/4); + EVert =(Vert /4); + EBleu =(Bleu /4); Suivant->R=Valeur_modifiee(Suivant->R,ERouge); Suivant->V=Valeur_modifiee(Suivant->V,EVert ); 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 ); } } -*/ + // On passe au pixel suivant : Courant++; C_plus1++;