-BMP Loading
-Fixed PCX loading -Some work on ILBM loading -Little adaptation for long filenames (does not crash anymore, but there are display bugs) -Some other small fixes i can't remember git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@123 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
fce305c1eb
commit
2b609d6e03
4
divers.c
4
divers.c
@ -625,10 +625,10 @@ byte Couleur_ILBM_line(word Pos_X, word Vraie_taille_ligne)
|
|||||||
int ax,bh,dx;
|
int ax,bh,dx;
|
||||||
byte bl=0;
|
byte bl=0;
|
||||||
|
|
||||||
for(dx = HBPm1;dx>=0;dx--);
|
for(dx = HBPm1;dx>0;dx--);
|
||||||
{
|
{
|
||||||
//CIL_Loop
|
//CIL_Loop
|
||||||
ax = (Vraie_taille_ligne * HBPm1 + Pos_X) >> 3;
|
ax = (Vraie_taille_ligne * dx + Pos_X) >> 3;
|
||||||
bh = (LBM_Buffer[ax] >> cl) & 1;
|
bh = (LBM_Buffer[ax] >> cl) & 1;
|
||||||
|
|
||||||
bl = (bl << 1) + bh;
|
bl = (bl << 1) + bh;
|
||||||
|
|||||||
6
global.h
6
global.h
@ -216,13 +216,13 @@ GLOBAL short Ancien_Principal_Decalage_Y;
|
|||||||
GLOBAL char Principal_Drive_fichier[2];
|
GLOBAL char Principal_Drive_fichier[2];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GLOBAL char Principal_Repertoire_fichier[256]; // |_ Nom complet =
|
GLOBAL char Principal_Repertoire_fichier[1024]; // |_ Nom complet =
|
||||||
GLOBAL char Principal_Nom_fichier[13]; // | Repertoire_fichier+"\"+Nom_fichier
|
GLOBAL char Principal_Nom_fichier[256]; // | Repertoire_fichier+"\"+Nom_fichier
|
||||||
GLOBAL byte Principal_Format_fichier; // Format auquel il faut lire et Úcrire le fichier
|
GLOBAL byte Principal_Format_fichier; // Format auquel il faut lire et Úcrire le fichier
|
||||||
GLOBAL byte Principal_Format; // Format du fileselect
|
GLOBAL byte Principal_Format; // Format du fileselect
|
||||||
GLOBAL short Principal_File_list_Position; // DÚbut de la partie affichÚe dans la liste de fichiers
|
GLOBAL short Principal_File_list_Position; // DÚbut de la partie affichÚe dans la liste de fichiers
|
||||||
GLOBAL short Principal_File_list_Decalage; // DÚcalage de la barre de sÚlection dans le fileselector
|
GLOBAL short Principal_File_list_Decalage; // DÚcalage de la barre de sÚlection dans le fileselector
|
||||||
GLOBAL char Principal_Repertoire_courant[256]; // RÚpertoire actuel sur disque
|
GLOBAL char Principal_Repertoire_courant[1024]; // RÚpertoire actuel sur disque
|
||||||
GLOBAL char Principal_Commentaire[TAILLE_COMMENTAIRE+1]; // Commentaire de l'image
|
GLOBAL char Principal_Commentaire[TAILLE_COMMENTAIRE+1]; // Commentaire de l'image
|
||||||
|
|
||||||
GLOBAL short Principal_Split; // Position en X du bord gauche du split de la loupe
|
GLOBAL short Principal_Split; // Position en X du bord gauche du split de la loupe
|
||||||
|
|||||||
130
loadsave.c
130
loadsave.c
@ -1395,9 +1395,9 @@ void Test_LBM(void)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Lire_long(); // On aurait pu vérifier que ce long est égal à la taille
|
Lire_long(); // On aurait pu vérifier que ce long est égal à la taille
|
||||||
// du fichier - 8, mais ‡a aurait interdit de charger des
|
// du fichier - 8, mais ça aurait interdit de charger des
|
||||||
// fichiers tronqués (et déjà que c'est chiant de perdre
|
// fichiers tronqués (et déjà que c'est chiant de perdre
|
||||||
// une partie du fichier il faut quand mˆme pouvoir en
|
// une partie du fichier il faut quand même pouvoir en
|
||||||
// garder un peu... Sinon, moi je pleure :'( !!! )
|
// garder un peu... Sinon, moi je pleure :'( !!! )
|
||||||
if (read(LBM_Fichier,Format,4)!=4)
|
if (read(LBM_Fichier,Format,4)!=4)
|
||||||
Erreur_fichier=1;
|
Erreur_fichier=1;
|
||||||
@ -1555,8 +1555,10 @@ void Test_LBM(void)
|
|||||||
if (Image_HAM<=1) // ILBM
|
if (Image_HAM<=1) // ILBM
|
||||||
{
|
{
|
||||||
for (Pos_X=0; Pos_X<Principal_Largeur_image; Pos_X++)
|
for (Pos_X=0; Pos_X<Principal_Largeur_image; Pos_X++)
|
||||||
|
{
|
||||||
Pixel_de_chargement(Pos_X,Pos_Y,Couleur_ILBM_line(Pos_X,Vraie_taille_ligne));
|
Pixel_de_chargement(Pos_X,Pos_Y,Couleur_ILBM_line(Pos_X,Vraie_taille_ligne));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Couleur=0;
|
Couleur=0;
|
||||||
@ -1769,6 +1771,7 @@ void Load_LBM(void)
|
|||||||
if (!Header.Compression)
|
if (!Header.Compression)
|
||||||
{ // non compressé
|
{ // non compressé
|
||||||
LBM_Buffer=(byte *)malloc(Taille_ligne);
|
LBM_Buffer=(byte *)malloc(Taille_ligne);
|
||||||
|
DEBUG("Fichier LBM NON compressé",0);
|
||||||
for (Pos_Y=0; ((Pos_Y<Principal_Hauteur_image) && (!Erreur_fichier)); Pos_Y++)
|
for (Pos_Y=0; ((Pos_Y<Principal_Hauteur_image) && (!Erreur_fichier)); Pos_Y++)
|
||||||
{
|
{
|
||||||
if (read(LBM_Fichier,LBM_Buffer,Taille_ligne)==Taille_ligne)
|
if (read(LBM_Fichier,LBM_Buffer,Taille_ligne)==Taille_ligne)
|
||||||
@ -1780,6 +1783,8 @@ void Load_LBM(void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // compressé
|
{ // compressé
|
||||||
|
DEBUG("Fichier LBM compressé",0);
|
||||||
|
Pixel_de_chargement=Pixel_Chargement_dans_ecran_courant;
|
||||||
Init_lecture();
|
Init_lecture();
|
||||||
|
|
||||||
LBM_Buffer=(byte *)malloc(Taille_ligne);
|
LBM_Buffer=(byte *)malloc(Taille_ligne);
|
||||||
@ -1789,6 +1794,8 @@ void Load_LBM(void)
|
|||||||
for (Pos_X=0; ((Pos_X<Taille_ligne) && (!Erreur_fichier)); )
|
for (Pos_X=0; ((Pos_X<Taille_ligne) && (!Erreur_fichier)); )
|
||||||
{
|
{
|
||||||
Octet=Lire_octet(LBM_Fichier);
|
Octet=Lire_octet(LBM_Fichier);
|
||||||
|
// Si Octet > 127 alors il faut répéter 256-'Octet' fois la couleur de l'octet suivant
|
||||||
|
// Si Octet <= 127 alors il faut afficher directement les 'Octet' octets suivants
|
||||||
if (Octet>127)
|
if (Octet>127)
|
||||||
{
|
{
|
||||||
Couleur=Lire_octet(LBM_Fichier);
|
Couleur=Lire_octet(LBM_Fichier);
|
||||||
@ -2121,43 +2128,62 @@ void Save_LBM(void)
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
struct BMP_Header
|
||||||
|
{
|
||||||
|
word Signature; // ='BM' = 0x4D42
|
||||||
|
uint32_t Taille_1; // =Taille du fichier
|
||||||
|
word Reserv_1; // =0
|
||||||
|
word Reserv_2; // =0
|
||||||
|
uint32_t Decalage; // Nb octets avant les données bitmap
|
||||||
|
|
||||||
|
uint32_t Taille_2; // =40
|
||||||
|
uint32_t Largeur;
|
||||||
|
uint32_t Hauteur;
|
||||||
|
word Plans; // =1
|
||||||
|
word Nb_bits; // =1,4,8 ou 24
|
||||||
|
uint32_t Compression;
|
||||||
|
uint32_t Taille_3;
|
||||||
|
uint32_t XPM;
|
||||||
|
uint32_t YPM;
|
||||||
|
uint32_t Nb_Clr;
|
||||||
|
uint32_t Clr_Imprt;
|
||||||
|
};
|
||||||
|
|
||||||
// -- Tester si un fichier est au format BMP --------------------------------
|
// -- Tester si un fichier est au format BMP --------------------------------
|
||||||
void Test_BMP(void)
|
void Test_BMP(void)
|
||||||
{
|
{
|
||||||
char Nom_du_fichier[256];
|
char Nom_du_fichier[256];
|
||||||
int Fichier;
|
int Fichier;
|
||||||
struct BMP_Header
|
struct BMP_Header Header;
|
||||||
{
|
|
||||||
word Signature; // ='BM' = 0x4D42
|
|
||||||
long Taille_1; // =Taille du fichier
|
|
||||||
word Reserv_1; // =0
|
|
||||||
word Reserv_2; // =0
|
|
||||||
long Decalage; // Nb octets avant les données bitmap
|
|
||||||
|
|
||||||
long Taille_2; // =40
|
|
||||||
long Largeur;
|
|
||||||
long Hauteur;
|
|
||||||
word Plans; // =1
|
|
||||||
word Nb_bits; // =1,4,8 ou 24
|
|
||||||
long Compression;
|
|
||||||
long Taille_3;
|
|
||||||
long XPM;
|
|
||||||
long YPM;
|
|
||||||
long Nb_Clr;
|
|
||||||
long Clr_Imprt;
|
|
||||||
} Header;
|
|
||||||
|
|
||||||
|
|
||||||
Erreur_fichier=1;
|
Erreur_fichier=1;
|
||||||
Nom_fichier_complet(Nom_du_fichier,0);
|
Nom_fichier_complet(Nom_du_fichier,0);
|
||||||
|
|
||||||
if ((Fichier=open(Nom_du_fichier,O_RDONLY))!=-1)
|
if ((Fichier=open(Nom_du_fichier,O_RDONLY))!=-1)
|
||||||
{
|
{
|
||||||
if (read(Fichier,&Header,sizeof(struct BMP_Header))==sizeof(struct BMP_Header))
|
if (read(Fichier,&(Header.Signature),sizeof(word))==sizeof(word)
|
||||||
|
&& read(Fichier,&(Header.Taille_1),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Reserv_1),sizeof(word))==sizeof(word)
|
||||||
|
&& read(Fichier,&(Header.Reserv_2),sizeof(word))==sizeof(word)
|
||||||
|
&& read(Fichier,&(Header.Decalage),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Taille_2),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Largeur),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Hauteur),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Plans),sizeof(word))==sizeof(word)
|
||||||
|
&& read(Fichier,&(Header.Nb_bits),sizeof(word))==sizeof(word)
|
||||||
|
&& read(Fichier,&(Header.Compression),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Taille_3),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.XPM),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.YPM),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Nb_Clr),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Clr_Imprt),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
|
||||||
|
)
|
||||||
|
{
|
||||||
if ( (Header.Signature==0x4D42) && (Header.Taille_2==40)
|
if ( (Header.Signature==0x4D42) && (Header.Taille_2==40)
|
||||||
&& Header.Largeur && Header.Hauteur )
|
&& Header.Largeur && Header.Hauteur )
|
||||||
Erreur_fichier=0;
|
Erreur_fichier=0;
|
||||||
|
}
|
||||||
close(Fichier);
|
close(Fichier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2168,26 +2194,7 @@ void Load_BMP(void)
|
|||||||
{
|
{
|
||||||
char Nom_du_fichier[256];
|
char Nom_du_fichier[256];
|
||||||
int Fichier;
|
int Fichier;
|
||||||
struct BMP_Header
|
struct BMP_Header Header;
|
||||||
{
|
|
||||||
word Signature; // ='BM' = 0x4D42
|
|
||||||
long Taille_1; // =Taille du fichier
|
|
||||||
word Reserv_1; // =0
|
|
||||||
word Reserv_2; // =0
|
|
||||||
long Decalage; // Nb octets avant les données bitmap
|
|
||||||
|
|
||||||
long Taille_2; // =40
|
|
||||||
long Largeur;
|
|
||||||
long Hauteur;
|
|
||||||
word Plans; // =1
|
|
||||||
word Nb_bits; // =1,4,8 ou 24
|
|
||||||
long Compression;
|
|
||||||
long Taille_3;
|
|
||||||
long XPM;
|
|
||||||
long YPM;
|
|
||||||
long Nb_Clr;
|
|
||||||
long Clr_Imprt;
|
|
||||||
} Header;
|
|
||||||
byte * Buffer;
|
byte * Buffer;
|
||||||
word Indice;
|
word Indice;
|
||||||
byte Palette_locale[256][4]; // R,V,B,0
|
byte Palette_locale[256][4]; // R,V,B,0
|
||||||
@ -2197,7 +2204,7 @@ void Load_BMP(void)
|
|||||||
word Taille_ligne;
|
word Taille_ligne;
|
||||||
byte A,B,C=0;
|
byte A,B,C=0;
|
||||||
long Taille_du_fichier;
|
long Taille_du_fichier;
|
||||||
struct stat* Informations_Fichier=NULL;
|
struct stat Informations_Fichier;
|
||||||
|
|
||||||
|
|
||||||
Nom_fichier_complet(Nom_du_fichier,0);
|
Nom_fichier_complet(Nom_du_fichier,0);
|
||||||
@ -2206,10 +2213,26 @@ void Load_BMP(void)
|
|||||||
|
|
||||||
if ((Fichier=open(Nom_du_fichier,O_RDONLY))!=-1)
|
if ((Fichier=open(Nom_du_fichier,O_RDONLY))!=-1)
|
||||||
{
|
{
|
||||||
stat(Nom_du_fichier,Informations_Fichier);
|
stat(Nom_du_fichier,&Informations_Fichier);
|
||||||
Taille_du_fichier=Informations_Fichier->st_size;
|
Taille_du_fichier=Informations_Fichier.st_size;
|
||||||
|
|
||||||
if (read(Fichier,&Header,sizeof(struct BMP_Header))==sizeof(struct BMP_Header))
|
if (read(Fichier,&(Header.Signature),sizeof(word))==sizeof(word)
|
||||||
|
&& read(Fichier,&(Header.Taille_1),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Reserv_1),sizeof(word))==sizeof(word)
|
||||||
|
&& read(Fichier,&(Header.Reserv_2),sizeof(word))==sizeof(word)
|
||||||
|
&& read(Fichier,&(Header.Decalage),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Taille_2),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Largeur),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Hauteur),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Plans),sizeof(word))==sizeof(word)
|
||||||
|
&& read(Fichier,&(Header.Nb_bits),sizeof(word))==sizeof(word)
|
||||||
|
&& read(Fichier,&(Header.Compression),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Taille_3),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.XPM),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.YPM),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Nb_Clr),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
&& read(Fichier,&(Header.Clr_Imprt),sizeof(uint32_t))==sizeof(uint32_t)
|
||||||
|
)
|
||||||
{
|
{
|
||||||
switch (Header.Nb_bits)
|
switch (Header.Nb_bits)
|
||||||
{
|
{
|
||||||
@ -2232,7 +2255,7 @@ void Load_BMP(void)
|
|||||||
{
|
{
|
||||||
if (read(Fichier,Palette_locale,Nb_Couleurs<<2)==(Nb_Couleurs<<2))
|
if (read(Fichier,Palette_locale,Nb_Couleurs<<2)==(Nb_Couleurs<<2))
|
||||||
{
|
{
|
||||||
// On commence par passer la palette en 256 comme ‡a, si la nouvelle
|
// On commence par passer la palette en 256 comme ça, si la nouvelle
|
||||||
// palette a moins de 256 coul, la précédente ne souffrira pas d'un
|
// palette a moins de 256 coul, la précédente ne souffrira pas d'un
|
||||||
// assombrissement préjudiciable.
|
// assombrissement préjudiciable.
|
||||||
if (Config.Clear_palette)
|
if (Config.Clear_palette)
|
||||||
@ -3475,7 +3498,7 @@ void Load_PCX(void)
|
|||||||
byte Palette_16c[48]; // Palette 16 coul (inutile pour 256c) (débile!)
|
byte Palette_16c[48]; // Palette 16 coul (inutile pour 256c) (débile!)
|
||||||
byte Reserved; // Ca me plait ‡a aussi!
|
byte Reserved; // Ca me plait ‡a aussi!
|
||||||
byte Plane; // 4 => 16c , 1 => 256c , ...
|
byte Plane; // 4 => 16c , 1 => 256c , ...
|
||||||
word Bytes_per_plane_line;// Doit toujours ˆtre pair
|
word Bytes_per_plane_line;// Doit toujours être pair
|
||||||
word Palette_info; // 1 => Couleur , 2 => Gris (ignoré à partir de la version 4)
|
word Palette_info; // 1 => Couleur , 2 => Gris (ignoré à partir de la version 4)
|
||||||
word Screen_X; // |_ Dimensions de
|
word Screen_X; // |_ Dimensions de
|
||||||
word Screen_Y; // | l'écran d'origine
|
word Screen_Y; // | l'écran d'origine
|
||||||
@ -3565,12 +3588,15 @@ void Load_PCX(void)
|
|||||||
{
|
{
|
||||||
int indice;
|
int indice;
|
||||||
// On lit la palette 256c que ces crétins ont foutue à la fin du fichier
|
// On lit la palette 256c que ces crétins ont foutue à la fin du fichier
|
||||||
for(indice=0;indice<256;indice++);
|
for(indice=0;indice<256;indice++)
|
||||||
if ((read(Fichier,&Principal_Palette[indice].R,1)!=1)
|
if ((read(Fichier,&Principal_Palette[indice].R,1)!=1)
|
||||||
|| (read(Fichier,&Principal_Palette[indice].V,1)!=1)
|
|| (read(Fichier,&Principal_Palette[indice].V,1)!=1)
|
||||||
|| (read(Fichier,&Principal_Palette[indice].B,1)!=1))
|
|| (read(Fichier,&Principal_Palette[indice].B,1)!=1))
|
||||||
|
{
|
||||||
Erreur_fichier=2;
|
Erreur_fichier=2;
|
||||||
|
DEBUG("ERROR READING PCX PALETTE !",indice);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Palette_256_to_64(Principal_Palette);
|
Palette_256_to_64(Principal_Palette);
|
||||||
|
|||||||
@ -441,8 +441,15 @@ void Set_Mode_SDL()
|
|||||||
#else
|
#else
|
||||||
#define FLAGS SDL_FULLSCREEN
|
#define FLAGS SDL_FULLSCREEN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
DEBUG("Mode L",Largeur_ecran);
|
||||||
|
DEBUG("Mode H",Hauteur_ecran);
|
||||||
|
|
||||||
Ecran_SDL=SDL_SetVideoMode(Largeur_ecran,Hauteur_ecran,8,FLAGS);
|
Ecran_SDL=SDL_SetVideoMode(Largeur_ecran,Hauteur_ecran,8,FLAGS);
|
||||||
|
if(Ecran_SDL != NULL)
|
||||||
Ecran=Ecran_SDL->pixels;
|
Ecran=Ecran_SDL->pixels;
|
||||||
|
else
|
||||||
|
DEBUG("Erreur changement de mode video !!",0);
|
||||||
|
|
||||||
SDL_ShowCursor(0); // Cache le curseur SDL, on le gère en soft
|
SDL_ShowCursor(0); // Cache le curseur SDL, on le gère en soft
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user