Load_IFF() : support 24bits files
This commit is contained in:
parent
38c9e3e2cf
commit
7a9a862e26
@ -484,11 +484,11 @@ byte IFF_Wait_for(FILE * file, const char * expected_section)
|
|||||||
/// @param x_pos Position of the pixel in graphic line
|
/// @param x_pos Position of the pixel in graphic line
|
||||||
/// @param real_line_size Width of one bitplane in memory, in bytes
|
/// @param real_line_size Width of one bitplane in memory, in bytes
|
||||||
/// @param bitplanes Number of bitplanes
|
/// @param bitplanes Number of bitplanes
|
||||||
byte Get_IFF_color(const byte * buffer, word x_pos, word real_line_size, byte bitplanes)
|
dword Get_IFF_color(const byte * buffer, word x_pos, word real_line_size, byte bitplanes)
|
||||||
{
|
{
|
||||||
byte shift = 7 - (x_pos & 7);
|
byte shift = 7 - (x_pos & 7);
|
||||||
int address,masked_bit,plane;
|
int address,masked_bit,plane;
|
||||||
byte color=0;
|
dword color=0;
|
||||||
|
|
||||||
for(plane=bitplanes-1;plane>=0;plane--)
|
for(plane=bitplanes-1;plane>=0;plane--)
|
||||||
{
|
{
|
||||||
@ -524,7 +524,15 @@ void Set_IFF_color(byte * buffer, word x_pos, byte color, word real_line_size, b
|
|||||||
|
|
||||||
if (Image_HAM<=1) // ILBM
|
if (Image_HAM<=1) // ILBM
|
||||||
{
|
{
|
||||||
for (x_pos=0; x_pos<context->Width; x_pos++)
|
if (bitplanes > 8)
|
||||||
|
{
|
||||||
|
for (x_pos=0; x_pos<context->Width; x_pos++)
|
||||||
|
{
|
||||||
|
dword rgb = Get_IFF_color(buffer, x_pos,real_line_size, bitplanes);
|
||||||
|
Set_pixel_24b(context, x_pos,y_pos, rgb >> 16, rgb >> 8, rgb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else for (x_pos=0; x_pos<context->Width; x_pos++)
|
||||||
{
|
{
|
||||||
Set_pixel(context, x_pos,y_pos,Get_IFF_color(buffer, x_pos,real_line_size, bitplanes));
|
Set_pixel(context, x_pos,y_pos,Get_IFF_color(buffer, x_pos,real_line_size, bitplanes));
|
||||||
}
|
}
|
||||||
@ -680,6 +688,7 @@ void Load_IFF(T_IO_Context * context)
|
|||||||
byte * buffer;
|
byte * buffer;
|
||||||
T_Components * SHAM_palettes = NULL;
|
T_Components * SHAM_palettes = NULL;
|
||||||
unsigned SHAM_palette_count = 0;
|
unsigned SHAM_palette_count = 0;
|
||||||
|
byte truecolor = 0;
|
||||||
|
|
||||||
Get_full_filename(filename, context->File_name, context->File_directory);
|
Get_full_filename(filename, context->File_name, context->File_directory);
|
||||||
|
|
||||||
@ -758,6 +767,8 @@ void Load_IFF(T_IO_Context * context)
|
|||||||
else
|
else
|
||||||
ratio = PIXEL_WIDE; // 1.5 <= ratio
|
ratio = PIXEL_WIDE; // 1.5 <= ratio
|
||||||
}
|
}
|
||||||
|
if (header.BitPlanes > 8)
|
||||||
|
truecolor = 1;
|
||||||
|
|
||||||
while (File_error == 0
|
while (File_error == 0
|
||||||
&& Read_bytes(IFF_file,section,4)
|
&& Read_bytes(IFF_file,section,4)
|
||||||
@ -886,7 +897,7 @@ printf("%d x %d = %d %d\n", tiny_width, tiny_height, tiny_width*tiny_height, s
|
|||||||
// Load thumbnail if in preview mode
|
// Load thumbnail if in preview mode
|
||||||
if ((context->Type == CONTEXT_PREVIEW || context->Type == CONTEXT_PREVIEW_PALETTE) && iff_format == FORMAT_PBM)
|
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,0);
|
Pre_load(context, tiny_width, tiny_height,file_size,iff_format,ratio,truecolor);
|
||||||
PBM_Decode(context, IFF_file, header.Compression, tiny_width, tiny_height);
|
PBM_Decode(context, IFF_file, header.Compression, tiny_width, tiny_height);
|
||||||
fclose(IFF_file);
|
fclose(IFF_file);
|
||||||
IFF_file = NULL;
|
IFF_file = NULL;
|
||||||
@ -900,7 +911,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_X = header.X_screen;
|
||||||
Original_screen_Y = header.Y_screen;
|
Original_screen_Y = header.Y_screen;
|
||||||
|
|
||||||
Pre_load(context, header.Width, header.Height, file_size, iff_format, ratio, 0);
|
Pre_load(context, header.Width, header.Height, file_size, iff_format, ratio, truecolor);
|
||||||
context->Background_transparent = header.Mask == 2;
|
context->Background_transparent = header.Mask == 2;
|
||||||
context->Transparent_color = context->Background_transparent ? header.Transp_col : 0;
|
context->Transparent_color = context->Background_transparent ? header.Transp_col : 0;
|
||||||
|
|
||||||
@ -1068,7 +1079,7 @@ printf("%d x %d = %d %d\n", tiny_width, tiny_height, tiny_width*tiny_height, s
|
|||||||
File_error = 32;
|
File_error = 32;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // "PBM ": Planar(?) BitMap
|
else // "PBM ": Packed BitMap
|
||||||
{
|
{
|
||||||
PBM_Decode(context, IFF_file, header.Compression, context->Width, context->Height);
|
PBM_Decode(context, IFF_file, header.Compression, context->Width, context->Height);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user