-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;
|
||||
byte bl=0;
|
||||
|
||||
for(dx = HBPm1;dx>=0;dx--);
|
||||
for(dx = HBPm1;dx>0;dx--);
|
||||
{
|
||||
//CIL_Loop
|
||||
ax = (Vraie_taille_ligne * HBPm1 + Pos_X) >> 3;
|
||||
ax = (Vraie_taille_ligne * dx + Pos_X) >> 3;
|
||||
bh = (LBM_Buffer[ax] >> cl) & 1;
|
||||
|
||||
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];
|
||||
#endif
|
||||
|
||||
GLOBAL char Principal_Repertoire_fichier[256]; // |_ Nom complet =
|
||||
GLOBAL char Principal_Nom_fichier[13]; // | Repertoire_fichier+"\"+Nom_fichier
|
||||
GLOBAL char Principal_Repertoire_fichier[1024]; // |_ Nom complet =
|
||||
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; // 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_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 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
|
||||
{
|
||||
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
|
||||
// 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 :'( !!! )
|
||||
if (read(LBM_Fichier,Format,4)!=4)
|
||||
Erreur_fichier=1;
|
||||
@ -1555,8 +1555,10 @@ void Test_LBM(void)
|
||||
if (Image_HAM<=1) // ILBM
|
||||
{
|
||||
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));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Couleur=0;
|
||||
@ -1769,6 +1771,7 @@ void Load_LBM(void)
|
||||
if (!Header.Compression)
|
||||
{ // non compressé
|
||||
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++)
|
||||
{
|
||||
if (read(LBM_Fichier,LBM_Buffer,Taille_ligne)==Taille_ligne)
|
||||
@ -1780,6 +1783,8 @@ void Load_LBM(void)
|
||||
}
|
||||
else
|
||||
{ // compressé
|
||||
DEBUG("Fichier LBM compressé",0);
|
||||
Pixel_de_chargement=Pixel_Chargement_dans_ecran_courant;
|
||||
Init_lecture();
|
||||
|
||||
LBM_Buffer=(byte *)malloc(Taille_ligne);
|
||||
@ -1789,6 +1794,8 @@ void Load_LBM(void)
|
||||
for (Pos_X=0; ((Pos_X<Taille_ligne) && (!Erreur_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)
|
||||
{
|
||||
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 --------------------------------
|
||||
void Test_BMP(void)
|
||||
{
|
||||
char Nom_du_fichier[256];
|
||||
int Fichier;
|
||||
struct BMP_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;
|
||||
|
||||
struct BMP_Header Header;
|
||||
|
||||
Erreur_fichier=1;
|
||||
Nom_fichier_complet(Nom_du_fichier,0);
|
||||
|
||||
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)
|
||||
&& Header.Largeur && Header.Hauteur )
|
||||
Erreur_fichier=0;
|
||||
}
|
||||
close(Fichier);
|
||||
}
|
||||
}
|
||||
@ -2168,26 +2194,7 @@ void Load_BMP(void)
|
||||
{
|
||||
char Nom_du_fichier[256];
|
||||
int Fichier;
|
||||
struct BMP_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;
|
||||
struct BMP_Header Header;
|
||||
byte * Buffer;
|
||||
word Indice;
|
||||
byte Palette_locale[256][4]; // R,V,B,0
|
||||
@ -2197,7 +2204,7 @@ void Load_BMP(void)
|
||||
word Taille_ligne;
|
||||
byte A,B,C=0;
|
||||
long Taille_du_fichier;
|
||||
struct stat* Informations_Fichier=NULL;
|
||||
struct stat Informations_Fichier;
|
||||
|
||||
|
||||
Nom_fichier_complet(Nom_du_fichier,0);
|
||||
@ -2206,10 +2213,26 @@ void Load_BMP(void)
|
||||
|
||||
if ((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;
|
||||
|
||||
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)
|
||||
{
|
||||
@ -2232,7 +2255,7 @@ void Load_BMP(void)
|
||||
{
|
||||
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
|
||||
// assombrissement préjudiciable.
|
||||
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 Reserved; // Ca me plait ‡a aussi!
|
||||
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 Screen_X; // |_ Dimensions de
|
||||
word Screen_Y; // | l'écran d'origine
|
||||
@ -3565,12 +3588,15 @@ void Load_PCX(void)
|
||||
{
|
||||
int indice;
|
||||
// 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)
|
||||
|| (read(Fichier,&Principal_Palette[indice].V,1)!=1)
|
||||
|| (read(Fichier,&Principal_Palette[indice].B,1)!=1))
|
||||
|
||||
{
|
||||
Erreur_fichier=2;
|
||||
DEBUG("ERROR READING PCX PALETTE !",indice);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Palette_256_to_64(Principal_Palette);
|
||||
|
||||
@ -441,8 +441,15 @@ void Set_Mode_SDL()
|
||||
#else
|
||||
#define FLAGS SDL_FULLSCREEN
|
||||
#endif
|
||||
|
||||
DEBUG("Mode L",Largeur_ecran);
|
||||
DEBUG("Mode H",Hauteur_ecran);
|
||||
|
||||
Ecran_SDL=SDL_SetVideoMode(Largeur_ecran,Hauteur_ecran,8,FLAGS);
|
||||
if(Ecran_SDL != NULL)
|
||||
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
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user