From 2c187ef632c9422cc53ef1c006a481c43895a8dd Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sun, 10 Aug 2008 13:00:13 +0000 Subject: [PATCH] Corrected the palette reduction system. Gif loading now OK git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@113 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- divers.c | 21 +++++++++++++++++---- loadsave.c | 38 +++++++++++++++++++++++++++++--------- loadsave.h | 3 +++ 3 files changed, 49 insertions(+), 13 deletions(-) diff --git a/divers.c b/divers.c index 51585a74..ead6c387 100644 --- a/divers.c +++ b/divers.c @@ -606,8 +606,21 @@ long Freespace(byte Numero_de_lecteur) byte Couleur_ILBM_line(word Pos_X, word Vraie_taille_ligne) { - UNIMPLEMENTED - return 0; + // CL sera le rang auquel on extrait les bits de la couleur + byte cl = 7 - (Pos_X & 7); + int ax,bh,dx; + byte bl; + + for(dx = HBPm1;dx>=0;dx--); + { + //CIL_Loop + ax = (Vraie_taille_ligne * HBPm1 + Pos_X) >> 3; + bh = (LBM_Buffer[ax] >> cl) & 1; + + bl = (bl << 1) + bh; + } + + return bl; } void Palette_256_to_64(T_Palette Palette) @@ -615,9 +628,9 @@ void Palette_256_to_64(T_Palette Palette) int i; for(i=0;i<256;i++) { - Palette[i].R = Palette[i].B >> 2; + Palette[i].R = Palette[i].R >> 2; Palette[i].V = Palette[i].V >> 2; - Palette[i].B = Palette[i].R >> 2; + Palette[i].B = Palette[i].B >> 2; } } diff --git a/loadsave.c b/loadsave.c index c4ca15d7..1897eda6 100644 --- a/loadsave.c +++ b/loadsave.c @@ -25,7 +25,7 @@ #if __BYTE_ORDER == __BIG_ENDIAN #define endian_magic(x) bswap_16(x) #else - #define endian_magic(x) bswap_16(x) + #define endian_magic(x) (x) #endif #elif __WATCOMC__ #define endian_magic(x) (x) @@ -1414,9 +1414,7 @@ void Test_LBM(void) // -- Lire un fichier au format LBM ----------------------------------------- - byte * LBM_Buffer; byte Image_HAM; - byte HBPm1; // Header.BitPlanes-1 // ---------------- Adapter la palette pour les images HAM ---------------- void Adapter_Palette_HAM(void) @@ -1654,7 +1652,7 @@ void Load_LBM(void) short Vraie_taille_ligne; // Taille d'une ligne en pixels byte Couleur; long Taille_du_fichier; - struct stat* Informations_Fichier=NULL; + struct stat Informations_Fichier; Nom_fichier_complet(Nom_du_fichier,0); @@ -1663,8 +1661,8 @@ void Load_LBM(void) if ((LBM_Fichier=open(Nom_du_fichier,O_RDONLY))!=-1) { - stat(Nom_du_fichier,Informations_Fichier); - Taille_du_fichier=Informations_Fichier->st_size; + stat(Nom_du_fichier,&Informations_Fichier); + Taille_du_fichier=Informations_Fichier.st_size; // On avance dans le fichier (pas besoin de tester ce qui l'a déjà été) read(LBM_Fichier,Section,4); @@ -1675,7 +1673,19 @@ void Load_LBM(void) Lire_long(); // Maintenant on lit le header pour pouvoir commencer le chargement de l'image - if ( (read(LBM_Fichier,&Header,sizeof(struct Header_LBM))==sizeof(struct Header_LBM)) + if ( (read(LBM_Fichier,&Header.Width,sizeof(Header.Width))==sizeof(Header.Width)) + && (read(LBM_Fichier,&Header.Height,sizeof(Header.Height))==sizeof(Header.Height)) + && (read(LBM_Fichier,&Header.Xorg,sizeof(Header.Xorg))==sizeof(Header.Xorg)) + && (read(LBM_Fichier,&Header.Yorg,sizeof(Header.Yorg))==sizeof(Header.Yorg)) + && (read(LBM_Fichier,&Header.Bit_planes,sizeof(Header.Bit_planes))==sizeof(Header.Bit_planes)) + && (read(LBM_Fichier,&Header.Mask,sizeof(Header.Mask))==sizeof(Header.Mask)) + && (read(LBM_Fichier,&Header.Compression,sizeof(Header.Compression))==sizeof(Header.Compression)) + && (read(LBM_Fichier,&Header.Pad1,sizeof(Header.Pad1))==sizeof(Header.Pad1)) + && (read(LBM_Fichier,&Header.Transp_col,sizeof(Header.Transp_col))==sizeof(Header.Transp_col)) + && (read(LBM_Fichier,&Header.Xaspect,sizeof(Header.Xaspect))==sizeof(Header.Xaspect)) + && (read(LBM_Fichier,&Header.Yaspect,sizeof(Header.Yaspect))==sizeof(Header.Yaspect)) + && (read(LBM_Fichier,&Header.Xscreen,sizeof(Header.Xscreen))==sizeof(Header.Xscreen)) + && (read(LBM_Fichier,&Header.Yscreen,sizeof(Header.Yscreen))==sizeof(Header.Yscreen)) && Header.Width && Header.Height) { if ( (Header.Bit_planes) && (Wait_for((byte *)"CMAP")) ) @@ -2790,7 +2800,12 @@ void Load_GIF(void) // On peut maintenant charger la nouvelle palette: if (!(LSDB.Aspect & 0x80)) // Palette dans l'ordre: - read(GIF_Fichier,Principal_Palette,Nb_couleurs*3); + for(Indice_de_couleur=0;Indice_de_couleur