Added c64 picture samples

Put the correct version of loadsave.c. Sorry I'm a little ill today.


git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1014 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Adrien Destugues 2009-09-05 16:22:35 +00:00
parent cc47a21eca
commit 62ba2fd885
3 changed files with 86 additions and 69 deletions

View File

@ -634,53 +634,50 @@ void Load_image(byte image)
} }
else else
{ {
// Cas d'un chargement dans la brosse // Cas d'un chargement dans la brosse
if (Convert_24b_bitmap_to_256(Brush, Buffer_image_24b, Brush_width, if (Convert_24b_bitmap_to_256(Brush,Buffer_image_24b,Brush_width,Brush_height,Main_palette))
Brush_height, Main_palette)) File_error=2;
File_error = 2;
} }
//if (!File_error) //if (!File_error)
// Palette_256_to_64(Main_palette); // Palette_256_to_64(Main_palette);
// Normalement plus besoin car 256 color natif, et c'etait probablement // Normalement plus besoin car 256 color natif, et c'etait probablement
// un bug - yr // un bug - yr
} }
free(Buffer_image_24b); free(Buffer_image_24b);
} }
if (image) if (image)
{ {
if ( (File_error!=1) && (File_formats[format].Backup_done) ) if ( (File_error!=1) && (File_formats[format].Backup_done) )
{ {
if (Pixel_load_function==Pixel_load_in_preview) if (Pixel_load_function==Pixel_load_in_preview)
{ {
dword color_usage[256]; dword color_usage[256];
Count_used_colors_screen_area(color_usage, Preview_pos_X, Count_used_colors_area(color_usage,Preview_pos_X,Preview_pos_Y,Main_image_width/Preview_factor_X,Main_image_height/Preview_factor_Y);
Preview_pos_Y, Main_image_width / Preview_factor_X,
Main_image_height / Preview_factor_Y);
//Count_used_colors(color_usage); //Count_used_colors(color_usage);
Display_cursor(); Display_cursor();
Set_nice_menu_colors(color_usage, 1); Set_nice_menu_colors(color_usage,1);
Hide_cursor(); Hide_cursor();
} }
// On considère que l'image chargée n'est plus modifiée // On considère que l'image chargée n'est plus modifiée
Main_image_is_modified = 0; Main_image_is_modified=0;
// Et on documente la variable Main_fileformat avec la valeur: // Et on documente la variable Main_fileformat avec la valeur:
Main_fileformat = format + 1; Main_fileformat=format+1;
// Correction des dimensions // Correction des dimensions
if (Main_image_width<1) if (Main_image_width<1)
Main_image_width = 1; Main_image_width=1;
if (Main_image_height<1) if (Main_image_height<1)
Main_image_height = 1; Main_image_height=1;
} }
else if (File_error!=1) else if (File_error!=1)
{ {
// On considère que l'image chargée est encore modifiée // On considère que l'image chargée est encore modifiée
Main_image_is_modified = 1; Main_image_is_modified=1;
// Et on documente la variable Main_fileformat avec la valeur: // Et on documente la variable Main_fileformat avec la valeur:
Main_fileformat = format + 1; Main_fileformat=format+1;
} }
else else
{ {
@ -5854,10 +5851,10 @@ void Test_C64(void)
file = fopen(filename,"rb"); file = fopen(filename,"rb");
if(file) if (file)
{ {
file_size = File_length_file(file); file_size = File_length_file(file);
switch(file_size) switch (file_size)
{ {
case 8000: // raw bitmap case 8000: // raw bitmap
case 8002: // raw bitmap with loadaddr case 8002: // raw bitmap with loadaddr
@ -5871,7 +5868,7 @@ void Test_C64(void)
File_error = 1; File_error = 1;
} }
fclose(file); fclose (file);
} }
else else
{ {
@ -6003,12 +6000,13 @@ void Load_C64(void)
File_error = 1; File_error = 1;
} }
int Save_C64_hires(FILE *file) int Save_C64_hires(char *filename)
{ {
int cx,cy,x,y,c1,c2,i,pixel,bits; int cx,cy,x,y,c1,c2,i,pixel,bits,pos=0;
word numcolors; word numcolors;
dword cusage[256]; dword cusage[256];
byte colors[1000]; byte colors[1000],bitmap[8000];
FILE *file;
for(x=0;x<1000;x++)colors[x]=1; // init colormem to black/white for(x=0;x<1000;x++)colors[x]=1; // init colormem to black/white
@ -6018,8 +6016,8 @@ int Save_C64_hires(FILE *file)
{ {
for(i=0;i<256;i++) cusage[i]=0; for(i=0;i<256;i++) cusage[i]=0;
numcolors=Count_used_colors_area(cusage,cx*8,cy*8,8,8); numcolors=Count_used_colors_screen_area(cusage,cx*8,cy*8,8,8);
if(numcolors>2) if (numcolors>2)
{ {
Warning_message("More than 2 colors in 8x8 pixels"); Warning_message("More than 2 colors in 8x8 pixels");
// TODO here we should hilite the offending block // TODO here we should hilite the offending block
@ -6040,7 +6038,6 @@ int Save_C64_hires(FILE *file)
if(cusage[i]) if(cusage[i])
{ {
c1=i; c1=i;
} }
} }
colors[cx+cy*40]=(c2<<4)|c1; colors[cx+cy*40]=(c2<<4)|c1;
@ -6060,17 +6057,31 @@ int Save_C64_hires(FILE *file)
return 1; return 1;
} }
bits=bits<<1; bits=bits<<1;
if(pixel==c1) bits|=1; if (pixel==c1) bits|=1;
} }
Write_byte(file,bits&255); bitmap[pos++]=bits;
//Write_byte(file,bits&255);
} }
} }
} }
file = fopen(filename,"wb");
if(!file)
{
Warning_message("File open failed");
File_error = 1;
return 1;
}
Write_bytes(file,bitmap,8000);
Write_bytes(file,colors,1000); Write_bytes(file,colors,1000);
fclose(file);
return 0; return 0;
} }
int Save_C64_multi(FILE *file) int Save_C64_multi(char *filename)
{ {
/* /*
BITS COLOR INFORMATION COMES FROM BITS COLOR INFORMATION COMES FROM
@ -6080,11 +6091,13 @@ BITS COLOR INFORMATION COMES FROM
11 Color nybble (nybble = 1/2 byte = 4 bits) 11 Color nybble (nybble = 1/2 byte = 4 bits)
*/ */
int cx,cy,x,y,c[4]={0,0,0,0},color,lut[16],bits,pixel; int cx,cy,x,y,c[4]={0,0,0,0},color,lut[16],bits,pixel,pos=0;
byte screen[1000],nybble[1000]; byte bitmap[8000],screen[1000],nybble[1000];
word numcolors,count; word numcolors,count;
dword cusage[256]; dword cusage[256];
byte i,background=0; byte i,background=0;
FILE *file;
numcolors=Count_used_colors(cusage); numcolors=Count_used_colors(cusage);
count=0; count=0;
@ -6104,7 +6117,7 @@ BITS COLOR INFORMATION COMES FROM
//printf("\ny:%2d ",cy); //printf("\ny:%2d ",cy);
for(cx=0; cx<40; cx++) for(cx=0; cx<40; cx++)
{ {
numcolors=Count_used_colors_area(cusage,cx*4,cy*8,4,8); numcolors=Count_used_colors_screen_area(cusage,cx*4,cy*8,4,8);
if(numcolors>4) if(numcolors>4)
{ {
Warning_message("More than 4 colors in 4x8"); Warning_message("More than 4 colors in 4x8");
@ -6151,53 +6164,57 @@ BITS COLOR INFORMATION COMES FROM
bits|=lut[pixel]; bits|=lut[pixel];
} }
Write_byte(file,bits&255); //Write_byte(file,bits&255);
bitmap[pos++]=bits;
} }
} }
} }
Write_bytes(file,screen,1000);
Write_bytes(file,nybble,1000);
Write_byte(file,background);
//printf("\nbg:%d\n",background);
return 0;
}
void Save_C64(void)
{
FILE* file;
char filename[MAX_PATH_CHARACTERS];
dword numcolors,cusage[256];
numcolors=Count_used_colors(cusage);
if(numcolors>16)
{
Warning_message("Error: Max 16 colors");
File_error = 1;
return;
}
if(((Main_image_width!=320) && (Main_image_width!=160)) || Main_image_height!=200)
{
Warning_message("must be 320x200 or 160x200");
File_error = 1;
return;
}
Get_full_filename(filename,0);
file = fopen(filename,"wb"); file = fopen(filename,"wb");
if(!file) if(!file)
{ {
Warning_message("File open failed"); Warning_message("File open failed");
File_error = 1; File_error = 1;
return; return 1;
} }
Write_bytes(file,bitmap,8000);
if(Main_image_width==320) Write_bytes(file,screen,1000);
File_error = Save_C64_hires(file); Write_bytes(file,nybble,1000);
else Write_byte(file,background);
File_error = Save_C64_multi(file);
fclose(file); fclose(file);
//printf("\nbg:%d\n",background);
return 0;
}
void Save_C64(void)
{
char filename[MAX_PATH_CHARACTERS];
dword numcolors,cusage[256];
numcolors=Count_used_colors(cusage);
Get_full_filename(filename,0);
if (numcolors>16)
{
Warning_message("Error: Max 16 colors");
File_error = 1;
return;
}
if (((Main_image_width!=320) && (Main_image_width!=160)) || Main_image_height!=200)
{
Warning_message("must be 320x200 or 160x200");
File_error = 1;
return;
}
if (Main_image_width==320)
File_error = Save_C64_hires(filename);
else
File_error = Save_C64_multi(filename);
//fclose(file);
} }

BIN
pic-samples/hires.c64 Normal file

Binary file not shown.

BIN
pic-samples/multicolor.c64 Normal file

Binary file not shown.