Load and save palettes using JASC "standard" format. Still load old palettes from DOS Grafx2, but now we handle full color :)

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1137 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Adrien Destugues 2009-11-01 21:55:54 +00:00
parent a725f0035e
commit 1406e74f56
2 changed files with 87 additions and 50 deletions

View File

@ -497,20 +497,6 @@ void Init_preview(short width,short height,long size,int format, enum PIXEL_RATI
} }
void Draw_palette_preview(void)
{
short index;
if (Pixel_load_function==Pixel_load_in_preview)
for (index=0; index<256; index++)
Window_rectangle(183+(index/16)*7,95+(index&15)*5,5,5,index);
Update_window_area(183,95,120,80);
}
// Calcul du nom complet du fichier // Calcul du nom complet du fichier
void Get_full_filename(char * filename, byte is_colorix_format) void Get_full_filename(char * filename, byte is_colorix_format)
{ {

View File

@ -23,13 +23,30 @@
///@file miscfileformats.c ///@file miscfileformats.c
/// Formats that aren't fully saving, either because of palette restrictions or other things /// Formats that aren't fully saving, either because of palette restrictions or other things
#include "errors.h"
#include "global.h" #include "global.h"
#include "io.h"
#include "limits.h" #include "limits.h"
#include "loadsave.h" #include "loadsave.h"
#include "misc.h"
#include "sdlscreen.h"
#include "struct.h" #include "struct.h"
#include "windows.h" #include "windows.h"
//////////////////////////////////// PAL //////////////////////////////////// //////////////////////////////////// PAL ////////////////////////////////////
//
void Draw_palette_preview(void)
{
short index;
if (Pixel_load_function==Pixel_load_in_preview)
for (index=0; index<256; index++)
Window_rectangle(183+(index/16)*7,95+(index&15)*5,5,5,index);
Update_window_area(183,95,120,80);
}
// -- Tester si un fichier est au format PAL -------------------------------- // -- Tester si un fichier est au format PAL --------------------------------
void Test_PAL(void) void Test_PAL(void)
@ -38,19 +55,27 @@ void Test_PAL(void)
char filename[MAX_PATH_CHARACTERS]; // Nom complet du fichier char filename[MAX_PATH_CHARACTERS]; // Nom complet du fichier
long file_size; // Taille du fichier long file_size; // Taille du fichier
Get_full_filename(filename,0); Get_full_filename(filename, 0);
File_error=1; File_error = 1;
// Ouverture du fichier // Ouverture du fichier
if ((file=fopen(filename, "rb"))) if ((file = fopen(filename, "rb")))
{ {
// Lecture de la taille du fichier // Lecture de la taille du fichier
file_size=File_length_file(file); file_size = File_length_file(file);
fclose(file);
// Le fichier ne peut être au format PAL que si sa taille vaut 768 octets // Le fichier ne peut être au format PAL que si sa taille vaut 768 octets
if (file_size==sizeof(T_Palette)) if (file_size == sizeof(T_Palette))
File_error=0; File_error = 0;
else {
// Sinon c'est peut être un fichier palette ASCII "Jasc"
fread(filename, 1, 8, file);
if (strncmp(filename,"JASC-PAL",8) == 0)
{
File_error = 0;
}
}
fclose(file);
} }
} }
@ -68,23 +93,57 @@ void Load_PAL(void)
// Ouverture du fichier // Ouverture du fichier
if ((file=fopen(filename, "rb"))) if ((file=fopen(filename, "rb")))
{
long file_size = File_length_file(file);
// Le fichier ne peut être au format PAL que si sa taille vaut 768 octets
if (file_size == sizeof(T_Palette))
{ {
T_Palette palette_64; T_Palette palette_64;
// Init_preview(?); // Pas possible... pas d'image... // Init_preview(?); // Pas possible... pas d'image...
// Lecture du fichier dans Main_palette // Lecture du fichier dans Main_palette
if (Read_bytes(file,palette_64,sizeof(T_Palette))) if (Read_bytes(file, palette_64, sizeof(T_Palette)))
{ {
Palette_64_to_256(palette_64); Palette_64_to_256(palette_64);
memcpy(Main_palette,palette_64,sizeof(T_Palette)); memcpy(Main_palette, palette_64, sizeof(T_Palette));
Set_palette(Main_palette); Set_palette(Main_palette);
Remap_fileselector(); Remap_fileselector();
// On dessine une preview de la palette (si chargement=preview) // On dessine une preview de la palette (si chargement = preview)
Draw_palette_preview(); Draw_palette_preview();
} }
else else
File_error=2; File_error = 2;
} else {
fread(filename, 1, 8, file);
if (strncmp(filename,"JASC-PAL",8) == 0)
{
int i, n, r, g, b;
fscanf(file, "%d",&n);
if(n != 100)
{
File_error = 2;
fclose(file);
return;
}
// Read color count
fscanf(file, "%d",&n);
for (i = 0; i < n; i++)
{
fscanf(file, "%d %d %d",&r, &g, &b);
Main_palette[i].R = r;
Main_palette[i].G = g;
Main_palette[i].B = b;
Set_palette(Main_palette);
Remap_fileselector();
// On dessine une preview de la palette (si chargement = preview)
Draw_palette_preview();
}
} else File_error = 2;
}
// Fermeture du fichier // Fermeture du fichier
fclose(file); fclose(file);
@ -107,20 +166,12 @@ void Save_PAL(void)
File_error=0; File_error=0;
// Ouverture du fichier // Ouverture du fichier
if ((file=fopen(filename,"wb"))) if ((file=fopen(filename,"w")))
{ {
T_Palette palette_64; int i;
memcpy(palette_64,Main_palette,sizeof(T_Palette)); fputs("JASC-PAL\n0100\n256\n", file);
Palette_256_to_64(palette_64); for (i = 0; i < 256; i++)
// Enregistrement de Main_palette dans le fichier fprintf(file,"%d %d %d\n",Main_palette[i].R, Main_palette[i].G, Main_palette[i].B);
if (! Write_bytes(file,palette_64,sizeof(T_Palette)))
{
File_error=1;
fclose(file);
remove(filename);
}
else // Ecriture correcte => Fermeture normale du fichier
fclose(file);
} }
else // Si on n'a pas réussi à ouvrir le fichier, alors il y a eu une erreur else // Si on n'a pas réussi à ouvrir le fichier, alors il y a eu une erreur
{ {