Load_Recoil(): preserve original picture aspect ratio

skip RECOIL pixel doubling
This commit is contained in:
Thomas Bernard 2018-03-05 15:40:19 +01:00
parent 2995a0e3e1
commit 0fd3fb80fd

View File

@ -97,13 +97,23 @@ void Load_Recoil_Image(T_IO_Context *context)
if (RECOIL_Decode(recoil, context->File_name, file_content, file_length)) if (RECOIL_Decode(recoil, context->File_name, file_content, file_length))
{ {
int width, height; int width, height;
int original_width, original_height;
int x, y; int x, y;
int x_ratio, y_ratio;
byte * pixels; byte * pixels;
const int *palette; const int *palette;
enum PIXEL_RATIO ratio = PIXEL_SIMPLE; enum PIXEL_RATIO ratio = PIXEL_SIMPLE;
width = RECOIL_GetWidth(recoil); width = RECOIL_GetWidth(recoil);
height = RECOIL_GetHeight(recoil); height = RECOIL_GetHeight(recoil);
original_width = RECOIL_GetOriginalWidth(recoil);
original_height = RECOIL_GetOriginalHeight(recoil);
x_ratio = width / original_width;
y_ratio = height / original_height;
if (x_ratio > 1 && y_ratio == 1)
ratio = PIXEL_WIDE;
else if(x_ratio == 1 && y_ratio > 1)
ratio = PIXEL_TALL;
pixels = malloc(width * height); pixels = malloc(width * height);
if (pixels == NULL) if (pixels == NULL)
{ {
@ -120,14 +130,17 @@ void Load_Recoil_Image(T_IO_Context *context)
// 24bits // 24bits
const int * tc_pixels; const int * tc_pixels;
Pre_load(context, width, height, file_length, FORMAT_MISC, ratio, 24); Pre_load(context, original_width, original_height, file_length, FORMAT_MISC, ratio, 24);
tc_pixels = RECOIL_GetPixels(recoil); tc_pixels = RECOIL_GetPixels(recoil);
for (y = 0; y < height; y++) for (y = 0; y < original_height; y++)
for (x = 0; x < width; x++) {
for (x = 0; x < original_width; x++)
{ {
Set_pixel_24b(context, x, y, *tc_pixels >> 16, *tc_pixels >> 8, *tc_pixels); Set_pixel_24b(context, x, y, *tc_pixels >> 16, *tc_pixels >> 8, *tc_pixels);
tc_pixels++; tc_pixels += x_ratio;
} }
tc_pixels += width * (y_ratio - 1);
}
} }
else else
{ {
@ -148,12 +161,16 @@ void Load_Recoil_Image(T_IO_Context *context)
context->Palette[i].G = (byte)(palette[i] >> 8); context->Palette[i].G = (byte)(palette[i] >> 8);
context->Palette[i].B = (byte)(palette[i]); context->Palette[i].B = (byte)(palette[i]);
} }
Pre_load(context, width, height, file_length, FORMAT_MISC, ratio, bpp); Pre_load(context, original_width, original_height, file_length, FORMAT_MISC, ratio, bpp);
for (y = 0; y < height; y++) for (y = 0; y < original_height; y++)
for (x = 0; x < width; x++) {
for (x = 0; x < original_width; x++)
{ {
Set_pixel(context, x, y, *p++); Set_pixel(context, x, y, *p);
p += x_ratio;
} }
p += width * (y_ratio - 1);
}
} }
free(pixels); free(pixels);
if (!File_error) if (!File_error)