Display the bpp of the picture in the Load/Save Dialog
This commit is contained in:
parent
039f9af663
commit
2bfbc03cb8
@ -614,7 +614,7 @@ void Load_IFF(T_IO_Context * context)
|
||||
byte * buffer;
|
||||
T_Components * SHAM_palettes = NULL;
|
||||
unsigned SHAM_palette_count = 0;
|
||||
byte truecolor = 0;
|
||||
byte bpp = 0;
|
||||
byte Image_HAM = 0;
|
||||
T_IFF_PCHG_Palette * PCHG_palettes = NULL;
|
||||
|
||||
@ -698,8 +698,7 @@ void Load_IFF(T_IO_Context * context)
|
||||
else
|
||||
ratio = PIXEL_WIDE; // 1.5 <= ratio
|
||||
}
|
||||
if (header.BitPlanes > 8)
|
||||
truecolor = 1;
|
||||
bpp = header.BitPlanes;
|
||||
|
||||
while (File_error == 0
|
||||
&& Read_bytes(IFF_file,section,4)
|
||||
@ -712,7 +711,7 @@ void Load_IFF(T_IO_Context * context)
|
||||
if ((header.BitPlanes==6 && nb_colors==16) || (header.BitPlanes==8 && nb_colors==64))
|
||||
{
|
||||
Image_HAM=header.BitPlanes;
|
||||
truecolor = 1;
|
||||
bpp = 3 * (header.BitPlanes - 2); // HAM6 = 12bpp, HAM8 = 18bpp
|
||||
}
|
||||
|
||||
if (Config.Clear_palette)
|
||||
@ -802,7 +801,7 @@ void Load_IFF(T_IO_Context * context)
|
||||
word version;
|
||||
|
||||
Image_HAM = header.BitPlanes;
|
||||
truecolor = 1;
|
||||
bpp = 3 * (header.BitPlanes - 2);
|
||||
Read_word_be(IFF_file, &version); // always 0
|
||||
section_size -= 2;
|
||||
SHAM_palette_count = section_size >> 5; // 32 bytes per palette (16 colors * 2 bytes)
|
||||
@ -982,7 +981,7 @@ void Load_IFF(T_IO_Context * context)
|
||||
}
|
||||
fseek(IFF_file, (section_size+1)&~1, SEEK_CUR);
|
||||
if (PCHG_palettes != NULL)
|
||||
truecolor = 1;
|
||||
bpp = 12;
|
||||
}
|
||||
else if (memcmp(section, "TINY", 4) == 0)
|
||||
{
|
||||
@ -995,7 +994,7 @@ printf("%d x %d = %d %d\n", tiny_width, tiny_height, tiny_width*tiny_height, s
|
||||
// Load thumbnail if in preview mode
|
||||
if ((context->Type == CONTEXT_PREVIEW || context->Type == CONTEXT_PREVIEW_PALETTE) && iff_format == FORMAT_PBM)
|
||||
{
|
||||
Pre_load(context, tiny_width, tiny_height,file_size,iff_format,ratio,truecolor);
|
||||
Pre_load(context, tiny_width, tiny_height,file_size,iff_format,ratio,bpp);
|
||||
PBM_Decode(context, IFF_file, header.Compression, tiny_width, tiny_height);
|
||||
fclose(IFF_file);
|
||||
IFF_file = NULL;
|
||||
@ -1021,7 +1020,7 @@ printf("%d x %d = %d %d\n", tiny_width, tiny_height, tiny_width*tiny_height, s
|
||||
// ACBM format : ABIT = Amiga BITplanes
|
||||
// The ABIT chunk contains contiguous bitplane data.
|
||||
// The chunk contains sequential data for bitplane 0 through bitplane n.
|
||||
Pre_load(context, header.Width, header.Height, file_size, iff_format, ratio, truecolor);
|
||||
Pre_load(context, header.Width, header.Height, file_size, iff_format, ratio, bpp);
|
||||
// compute row size
|
||||
real_line_size = (context->Width+15) & ~15;
|
||||
plane_line_size = real_line_size >> 3; // 8bits per byte
|
||||
@ -1066,7 +1065,7 @@ printf("%d x %d = %d %d\n", tiny_width, tiny_height, tiny_width*tiny_height, s
|
||||
Original_screen_X = header.X_screen;
|
||||
Original_screen_Y = header.Y_screen;
|
||||
|
||||
Pre_load(context, header.Width, header.Height, file_size, iff_format, ratio, truecolor);
|
||||
Pre_load(context, header.Width, header.Height, file_size, iff_format, ratio, bpp);
|
||||
context->Background_transparent = header.Mask == 2;
|
||||
context->Transparent_color = context->Background_transparent ? header.Transp_col : 0;
|
||||
|
||||
@ -2083,7 +2082,7 @@ void Load_BMP(T_IO_Context * context)
|
||||
}
|
||||
if (File_error == 0)
|
||||
{
|
||||
Pre_load(context, header.Width,header.Height,file_size,FORMAT_BMP,PIXEL_SIMPLE,true_color);
|
||||
Pre_load(context, header.Width,header.Height,file_size,FORMAT_BMP,PIXEL_SIMPLE,header.Nb_bits);
|
||||
if (File_error==0)
|
||||
{
|
||||
if (true_color)
|
||||
@ -2434,7 +2433,7 @@ void Load_ICO(T_IO_Context * context)
|
||||
mask[1] = 0x0000FF00;
|
||||
mask[2] = 0x000000FF;
|
||||
}
|
||||
Pre_load(context, bmpheader.Width,real_height,File_length_file(file),FORMAT_ICO,PIXEL_SIMPLE,(bmpheader.Nb_bits > 8) || (nb_colors > 256));
|
||||
Pre_load(context, bmpheader.Width,real_height,File_length_file(file),FORMAT_ICO,PIXEL_SIMPLE,bmpheader.Nb_bits);
|
||||
if (bmpheader.Nb_bits <= 8)
|
||||
Load_BMP_Palette(context, file, nb_colors, 0);
|
||||
else
|
||||
@ -2843,7 +2842,7 @@ void Load_GIF(T_IO_Context * context)
|
||||
else
|
||||
ratio=PIXEL_SIMPLE;
|
||||
|
||||
Pre_load(context, LSDB.Width,LSDB.Height,file_size,FORMAT_GIF,ratio,0);
|
||||
Pre_load(context, LSDB.Width,LSDB.Height,file_size,FORMAT_GIF,ratio,(LSDB.Resol&7)+1);
|
||||
context->Width=LSDB.Width;
|
||||
context->Height=LSDB.Height;
|
||||
|
||||
@ -3988,9 +3987,10 @@ void Load_PCX(T_IO_Context * context)
|
||||
Original_screen_X=PCX_header.Screen_X;
|
||||
Original_screen_Y=PCX_header.Screen_Y;
|
||||
|
||||
Pre_load(context, context->Width, context->Height, file_size, FORMAT_PCX, PIXEL_SIMPLE, PCX_header.Plane * PCX_header.Depth);
|
||||
|
||||
if (!(PCX_header.Plane==3 && PCX_header.Depth==8))
|
||||
{
|
||||
Pre_load(context, context->Width,context->Height,file_size,FORMAT_PCX,PIXEL_SIMPLE,0);
|
||||
if (File_error==0)
|
||||
{
|
||||
// On prépare la palette à accueillir les valeurs du fichier PCX
|
||||
@ -4198,9 +4198,6 @@ void Load_PCX(T_IO_Context * context)
|
||||
else
|
||||
{
|
||||
// Image 24 bits!!!
|
||||
|
||||
Pre_load(context,context->Width,context->Height,file_size,FORMAT_PCX,PIXEL_SIMPLE,1);
|
||||
|
||||
if (File_error==0)
|
||||
{
|
||||
line_size=PCX_header.Bytes_per_plane_line*3;
|
||||
@ -4761,6 +4758,7 @@ static void Load_PNG_Sub(T_IO_Context * context, FILE * file)
|
||||
png_byte color_type;
|
||||
png_byte bit_depth;
|
||||
png_voidp user_chunk_ptr;
|
||||
byte bpp;
|
||||
|
||||
// Setup a return point. If a pnglib loading error occurs
|
||||
// in this if(), the else will be executed.
|
||||
@ -4782,6 +4780,23 @@ static void Load_PNG_Sub(T_IO_Context * context, FILE * file)
|
||||
color_type = png_get_color_type(png_ptr,info_ptr);
|
||||
bit_depth = png_get_bit_depth(png_ptr,info_ptr);
|
||||
|
||||
switch (color_type)
|
||||
{
|
||||
case PNG_COLOR_TYPE_GRAY_ALPHA:
|
||||
bpp = bit_depth * 2;
|
||||
break;
|
||||
case PNG_COLOR_TYPE_RGB:
|
||||
bpp = bit_depth * 3;
|
||||
break;
|
||||
case PNG_COLOR_TYPE_RGB_ALPHA:
|
||||
bpp = bit_depth * 4;
|
||||
break;
|
||||
case PNG_COLOR_TYPE_PALETTE:
|
||||
case PNG_COLOR_TYPE_GRAY:
|
||||
default:
|
||||
bpp = bit_depth;
|
||||
}
|
||||
|
||||
// If it's any supported file
|
||||
// (Note: As of writing this, this test covers every possible
|
||||
// image format of libpng)
|
||||
@ -4833,9 +4848,9 @@ static void Load_PNG_Sub(T_IO_Context * context, FILE * file)
|
||||
}
|
||||
}
|
||||
if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||
Pre_load(context,png_get_image_width(png_ptr,info_ptr),png_get_image_height(png_ptr,info_ptr),File_length_file(file),FORMAT_PNG,PIXEL_SIMPLE,1);
|
||||
Pre_load(context,png_get_image_width(png_ptr,info_ptr),png_get_image_height(png_ptr,info_ptr),File_length_file(file),FORMAT_PNG,PIXEL_SIMPLE,bpp);
|
||||
else
|
||||
Pre_load(context,png_get_image_width(png_ptr,info_ptr),png_get_image_height(png_ptr,info_ptr),File_length_file(file),FORMAT_PNG,context->Ratio,0);
|
||||
Pre_load(context,png_get_image_width(png_ptr,info_ptr),png_get_image_height(png_ptr,info_ptr),File_length_file(file),FORMAT_PNG,context->Ratio,bpp);
|
||||
|
||||
if (File_error==0)
|
||||
{
|
||||
|
||||
@ -1517,7 +1517,6 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
||||
|
||||
Print_in_window(9,47,"Filename",MC_Dark,MC_Light);
|
||||
Print_in_window(9,59,"Image:",MC_Dark,MC_Light);
|
||||
Print_in_window(101,59,"Size:",MC_Dark,MC_Light);
|
||||
Print_in_window(228,59,"(",MC_Dark,MC_Light);
|
||||
Print_in_window(292,59,")",MC_Dark,MC_Light);
|
||||
|
||||
@ -2144,7 +2143,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
||||
// On nettoie la zone où va s'afficher la preview:
|
||||
Window_rectangle(183,95,PREVIEW_WIDTH,PREVIEW_HEIGHT,MC_Light);
|
||||
// On efface les dimensions de l'image
|
||||
Window_rectangle(143,59,72,8,MC_Light);
|
||||
Window_rectangle(101,59,120,8,MC_Light);
|
||||
// On efface la taille du fichier
|
||||
Window_rectangle(236,59,56,8,MC_Light);
|
||||
// On efface le format du fichier
|
||||
|
||||
@ -382,10 +382,14 @@ int Get_frame_duration(T_IO_Context *context)
|
||||
///
|
||||
/// Generic allocation and similar stuff, done at beginning of image load,
|
||||
/// as soon as size is known.
|
||||
void Pre_load(T_IO_Context *context, short width, short height, long file_size, int format, enum PIXEL_RATIO ratio, byte truecolor)
|
||||
void Pre_load(T_IO_Context *context, short width, short height, long file_size, int format, enum PIXEL_RATIO ratio, byte bpp)
|
||||
{
|
||||
char str[10];
|
||||
byte truecolor;
|
||||
|
||||
if (bpp == 0)
|
||||
bpp = 8; // default to 8bits
|
||||
truecolor = (bpp > 8) ? 1 : 0;
|
||||
context->Pitch = width; // default
|
||||
context->Width = width;
|
||||
context->Height = height;
|
||||
@ -410,32 +414,33 @@ void Pre_load(T_IO_Context *context, short width, short height, long file_size,
|
||||
Num2str(width,str,4);
|
||||
Num2str(height,str+5,4);
|
||||
str[4]='x';
|
||||
Print_in_window(143,59,str,MC_Black,MC_Light);
|
||||
}
|
||||
else
|
||||
{
|
||||
Print_in_window(143,59,"VERY BIG!",MC_Black,MC_Light);
|
||||
memcpy(str, "VERY BIG!", 10);
|
||||
}
|
||||
Print_in_window(101,59,str,MC_Black,MC_Light);
|
||||
snprintf(str, sizeof(str), "%2dbpp", bpp);
|
||||
Print_in_window(181,59,str,MC_Black,MC_Light);
|
||||
|
||||
// Affichage de la taille du fichier
|
||||
if (file_size<1048576)
|
||||
{
|
||||
// Le fichier fait moins d'un Mega, on affiche sa taille direct
|
||||
Num2str(file_size,str,7);
|
||||
Print_in_window(236,59,str,MC_Black,MC_Light);
|
||||
}
|
||||
else if ((file_size/1024)<100000)
|
||||
else if (((file_size+512)/1024)<100000)
|
||||
{
|
||||
// Le fichier fait plus d'un Mega, on peut afficher sa taille en Ko
|
||||
Num2str(file_size/1024,str,5);
|
||||
strcpy(str+5,"Kb");
|
||||
Print_in_window(236,59,str,MC_Black,MC_Light);
|
||||
Num2str((file_size+512)/1024,str,5);
|
||||
strcpy(str+5,"KB");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Le fichier fait plus de 100 Mega octets (cas très rare :))
|
||||
Print_in_window(236,59,"LARGE!!",MC_Black,MC_Light);
|
||||
memcpy(str,"LARGE!!",8);
|
||||
}
|
||||
Print_in_window(236,59,str,MC_Black,MC_Light);
|
||||
|
||||
// Affichage du vrai format
|
||||
if (format!=Selector->Format_filter)
|
||||
@ -1123,7 +1128,7 @@ void Load_SDL_Image(T_IO_Context *context)
|
||||
{
|
||||
// 8bpp image
|
||||
|
||||
Pre_load(context, surface->w, surface->h, file_size ,FORMAT_MISC, PIXEL_SIMPLE, 0);
|
||||
Pre_load(context, surface->w, surface->h, file_size ,FORMAT_MISC, PIXEL_SIMPLE, 8);
|
||||
|
||||
// Read palette
|
||||
if (surface->format->palette)
|
||||
@ -1144,7 +1149,7 @@ void Load_SDL_Image(T_IO_Context *context)
|
||||
{
|
||||
{
|
||||
// Hi/Trucolor
|
||||
Pre_load(context, surface->w, surface->h, file_size ,FORMAT_ALL_IMAGES, PIXEL_SIMPLE, 1);
|
||||
Pre_load(context, surface->w, surface->h, file_size ,FORMAT_ALL_IMAGES, PIXEL_SIMPLE, 8 * surface->format->BytesPerPixel);
|
||||
}
|
||||
|
||||
for (y_pos=0; y_pos<context->Height; y_pos++)
|
||||
|
||||
@ -204,7 +204,7 @@ unsigned int Nb_known_formats(void);
|
||||
// Internal use
|
||||
|
||||
/// Generic allocation and similar stuff, done at beginning of image load, as soon as size is known.
|
||||
void Pre_load(T_IO_Context *context, short width, short height, long file_size, int format, enum PIXEL_RATIO ratio, byte truecolor);
|
||||
void Pre_load(T_IO_Context *context, short width, short height, long file_size, int format, enum PIXEL_RATIO ratio, byte bpp);
|
||||
/// Fill the entire current layer/frame of an image being loaded with a color.
|
||||
void Fill_canvas(T_IO_Context *context, byte color);
|
||||
|
||||
|
||||
@ -1711,7 +1711,7 @@ void Load_PI1(T_IO_Context * context)
|
||||
if (Read_bytes(file,buffer,32034))
|
||||
{
|
||||
// Initialisation de la preview
|
||||
Pre_load(context, 320,200,File_length_file(file),FORMAT_PI1,PIXEL_SIMPLE,0);
|
||||
Pre_load(context, 320,200,File_length_file(file),FORMAT_PI1,PIXEL_SIMPLE,4);
|
||||
if (File_error==0)
|
||||
{
|
||||
// Initialisation de la palette
|
||||
@ -1719,9 +1719,6 @@ void Load_PI1(T_IO_Context * context)
|
||||
memset(context->Palette,0,sizeof(T_Palette));
|
||||
PI1_decode_palette(buffer+2,(byte *)context->Palette);
|
||||
|
||||
context->Width=320;
|
||||
context->Height=200;
|
||||
|
||||
// Chargement/décompression de l'image
|
||||
ptr=buffer+34;
|
||||
for (y_pos=0;y_pos<200;y_pos++)
|
||||
@ -2043,7 +2040,7 @@ void Load_PC1(T_IO_Context * context)
|
||||
if (Read_bytes(file,buffercomp,size))
|
||||
{
|
||||
// Initialisation de la preview
|
||||
Pre_load(context, 320,200,File_length_file(file),FORMAT_PC1,PIXEL_SIMPLE,0);
|
||||
Pre_load(context, 320,200,File_length_file(file),FORMAT_PC1,PIXEL_SIMPLE,4);
|
||||
if (File_error==0)
|
||||
{
|
||||
// Initialisation de la palette
|
||||
@ -2051,9 +2048,6 @@ void Load_PC1(T_IO_Context * context)
|
||||
memset(context->Palette,0,sizeof(T_Palette));
|
||||
PI1_decode_palette(buffercomp+2,(byte *)context->Palette);
|
||||
|
||||
context->Width=320;
|
||||
context->Height=200;
|
||||
|
||||
// Décompression du buffer
|
||||
PC1_uncompress_packbits(buffercomp+34,bufferdecomp);
|
||||
|
||||
@ -2232,7 +2226,7 @@ void Load_NEO(T_IO_Context * context)
|
||||
if (Read_bytes(file,buffer,32128))
|
||||
{
|
||||
// Initialisation de la preview
|
||||
Pre_load(context, 320,200,File_length_file(file),FORMAT_NEO,PIXEL_SIMPLE,0);
|
||||
Pre_load(context, 320,200,File_length_file(file),FORMAT_NEO,PIXEL_SIMPLE,4);
|
||||
if (File_error==0)
|
||||
{
|
||||
// Initialisation de la palette
|
||||
@ -2241,9 +2235,6 @@ void Load_NEO(T_IO_Context * context)
|
||||
// on saute la résolution et le flag, chacun 2 bits
|
||||
PI1_decode_palette(buffer+4,(byte *)context->Palette);
|
||||
|
||||
context->Width=320;
|
||||
context->Height=200;
|
||||
|
||||
// Chargement/décompression de l'image
|
||||
ptr=buffer+128;
|
||||
for (y_pos=0;y_pos<200;y_pos++)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user