diff --git a/gfx2.cfg b/gfx2.cfg index 11a60947..1b8da8c5 100644 Binary files a/gfx2.cfg and b/gfx2.cfg differ diff --git a/op_c.c b/op_c.c index 87420485..b4326525 100644 --- a/op_c.c +++ b/op_c.c @@ -178,7 +178,7 @@ Table_conversion * TC_New(int nbb_r,int nbb_v,int nbb_b) int taille; n=(Table_conversion *)malloc(sizeof(Table_conversion)); - if (n!=0) + if (n!=NULL) { // On recopie les paramŠtres demand‚s n->nbb_r=nbb_r; @@ -199,14 +199,14 @@ Table_conversion * TC_New(int nbb_r,int nbb_v,int nbb_b) // On tente d'allouer la table taille=(n->rng_r)*(n->rng_v)*(n->rng_b); n->table=(byte *)malloc(taille); - if (n->table!=0) + if (n->table!=NULL) // C'est bon! memset(n->table,0,taille); // Inutile, mais plus propre else { // Table impossible … allouer free(n); - n=0; + n=NULL; } } @@ -663,12 +663,16 @@ ClusterSet * CS_New(int nbmax,Table_occurence * to) { // On recopie les paramŠtres demand‚s n->nbmax=TO_Compter_couleurs(to); + + // On vient de compter le nombre de couleurs existantes, s'il est plus grand que 256 on limite à 256 (nombre de couleurs voulu au final) if (n->nbmax>nbmax) + { n->nbmax=nbmax; + } // On tente d'allouer la table n->clusters=(Cluster *)malloc(nbmax*sizeof(Cluster)); - if (n->clusters!=0) + if (n->clusters!=NULL) // C'est bon! On initialise CS_Init(n,to); else @@ -761,9 +765,11 @@ void CS_Generer(ClusterSet * cs,Table_occurence * to) Cluster_Analyser(&Nouveau1,to); Cluster_Analyser(&Nouveau2,to); - // On met ces deux nouveaux clusters dans le clusterSet - CS_Set(cs,&Nouveau1); - CS_Set(cs,&Nouveau2); + // On met ces deux nouveaux clusters dans le clusterSet... sauf s'ils sont vides + if(Nouveau1.occurences>0) + CS_Set(cs,&Nouveau1); + if(Nouveau2.occurences>0) + CS_Set(cs,&Nouveau2); } } @@ -881,7 +887,7 @@ DegradeSet * DS_New(ClusterSet * cs) DegradeSet * n; n=(DegradeSet *)malloc(sizeof(DegradeSet)); - if (n!=0) + if (n!=NULL) { // On recopie les paramŠtres demand‚s n->nbmax=cs->nbmax; @@ -1113,9 +1119,13 @@ int Valeur_modifiee(int valeur,int modif) { valeur+=modif; if (valeur<0) + { valeur=0; + } else if (valeur>255) + { valeur=255; + } return valeur; } @@ -1132,8 +1142,7 @@ void Convert_bitmap_24B_to_256_Floyd_Steinberg(Bitmap256 Dest,Bitmap24B Source,i Bitmap256 D; int Pos_X,Pos_Y; int Rouge,Vert,Bleu; - int DRouge,DVert,DBleu; - int ERouge,EVert,EBleu; + float ERouge,EVert,EBleu; // On initialise les variables de parcours: Courant =Source; // Le pixel dont on s'occupe @@ -1157,14 +1166,9 @@ void Convert_bitmap_24B_to_256_Floyd_Steinberg(Bitmap256 Dest,Bitmap24B Source,i *D=TC_Get(tc,Rouge,Vert,Bleu); // Puis on calcule pour chaque composante l'erreur dûe à l'approximation - 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; - DVert =Vert; - DBleu =Bleu; + Rouge-=palette[*D].R; + Vert -=palette[*D].V; + Bleu -=palette[*D].B; // Et dans chaque pixel voisin on propage l'erreur // A droite: @@ -1178,9 +1182,6 @@ void Convert_bitmap_24B_to_256_Floyd_Steinberg(Bitmap256 Dest,Bitmap24B Source,i C_plus1->V=Valeur_modifiee(C_plus1->V,EVert ); C_plus1->B=Valeur_modifiee(C_plus1->B,EBleu ); } - DRouge-=ERouge; - DVert -=EVert; - DBleu -=EBleu; // En bas à gauche: if (Pos_Y+1V=Valeur_modifiee(S_moins1->V,EVert ); S_moins1->B=Valeur_modifiee(S_moins1->B,EBleu ); } - DRouge-=ERouge; - DVert -=EVert; - DBleu -=EBleu; // En bas: - ERouge=(Rouge/4); - EVert =(Vert /4); - EBleu =(Bleu /4); + ERouge=(Rouge*5/16.0); + EVert =(Vert*5 /16.0); + EBleu =(Bleu*5 /16.0); Suivant->R=Valeur_modifiee(Suivant->R,ERouge); Suivant->V=Valeur_modifiee(Suivant->V,EVert ); Suivant->B=Valeur_modifiee(Suivant->B,EBleu ); - DRouge-=ERouge; - DVert -=EVert; - DBleu -=EBleu; // En bas à droite: if (Pos_X+1R=Valeur_modifiee(S_plus1->R,DRouge); - S_plus1->V=Valeur_modifiee(S_plus1->V,DVert ); - S_plus1->B=Valeur_modifiee(S_plus1->B,DBleu ); + ERouge=(Rouge/16.0); + EVert =(Vert /16.0); + EBleu =(Bleu /16.0); + S_plus1->R=Valeur_modifiee(S_plus1->R,ERouge); + S_plus1->V=Valeur_modifiee(S_plus1->V,EVert ); + S_plus1->B=Valeur_modifiee(S_plus1->B,EBleu ); } } diff --git a/struct.h b/struct.h index 97a1f43c..6baf15d0 100644 --- a/struct.h +++ b/struct.h @@ -49,7 +49,7 @@ typedef void (* fonction_display_zoom) (word,word,word,byte *); typedef void (* fonction_display_brush_Color_zoom) (word,word,word,word,word,word,byte,word,byte *); typedef void (* fonction_display_brush_Mono_zoom) (word,word,word,word,word,word,byte,byte,word,byte *); -struct Composantes +struct __attribute__ ((__packed__)) Composantes { byte R; byte V; diff --git a/tables_aide.h b/tables_aide.h index f4242ea7..de12379f 100644 --- a/tables_aide.h +++ b/tables_aide.h @@ -427,11 +427,11 @@ static const T_TABLEAIDE TableAideCredits[] = AIDE_TEXTE("") AIDE_BOLD(" BUGFINDERS") // AIDE_TEXTE("") // - AIDE_TEXTE(" Ced El Topo fallenblood") - AIDE_TEXTE(" Frost Grimmy keito") - AIDE_TEXTE(" kusma Lord Graga mind") - AIDE_TEXTE(" MooZ richienyhus tempest") - AIDE_TEXTE(" titus^Rab tobe") + AIDE_TEXTE(" BDCIron Ced El Topo ") + AIDE_TEXTE(" fallenblood Frost Grimmy ") + AIDE_TEXTE(" keito kusma Lord Graga ") + AIDE_TEXTE(" mind MooZ richienyhus") + AIDE_TEXTE(" tempest titus^Rab tobe") AIDE_TEXTE("") AIDE_BOLD (" OUR HOMEPAGE") // AIDE_TEXTE("") //