Handle PIXEL_TALL3 mode in file formats (GIF)

This commit is contained in:
Thomas Bernard 2018-01-08 18:14:51 +01:00
parent 0285f37fc2
commit 8dfd6d6c97
3 changed files with 24 additions and 16 deletions

View File

@ -3269,8 +3269,9 @@ void Load_picture(enum CONTEXT_TYPE type)
((context.Ratio == PIXEL_WIDE && ((context.Ratio == PIXEL_WIDE &&
Pixel_ratio != PIXEL_WIDE && Pixel_ratio != PIXEL_WIDE2) || Pixel_ratio != PIXEL_WIDE && Pixel_ratio != PIXEL_WIDE2) ||
(context.Ratio == PIXEL_TALL && (context.Ratio == PIXEL_TALL &&
Pixel_ratio != PIXEL_TALL && Pixel_ratio != PIXEL_TALL2 && Pixel_ratio != PIXEL_TALL && Pixel_ratio != PIXEL_TALL2) ||
Pixel_ratio != PIXEL_TALL3))) (context.Ratio == PIXEL_TALL3 &&
Pixel_ratio != PIXEL_TALL3) ))
{ {
Init_mode_video( Init_mode_video(
Video_mode[Current_resolution].Width, Video_mode[Current_resolution].Width,

View File

@ -4087,12 +4087,19 @@ void Load_GIF(T_IO_Context * context)
Original_screen_X=LSDB.Width; Original_screen_X=LSDB.Width;
Original_screen_Y=LSDB.Height; Original_screen_Y=LSDB.Height;
if (LSDB.Aspect==17) switch(LSDB.Aspect) {
ratio=PIXEL_TALL; case 17: // (17 + 15) / 64 = 1:2
else if (LSDB.Aspect==113) ratio=PIXEL_TALL;
ratio=PIXEL_WIDE; break;
else case 33: // (33 + 15) / 64 = 3:4
ratio=PIXEL_SIMPLE; ratio=PIXEL_TALL3;
break;
case 113: // (113 + 15) / 64 = 2:1
ratio=PIXEL_WIDE;
break;
default:
ratio=PIXEL_SIMPLE;
}
Pre_load(context, LSDB.Width,LSDB.Height,file_size,FORMAT_GIF,ratio,(LSDB.Resol&7)+1); Pre_load(context, LSDB.Width,LSDB.Height,file_size,FORMAT_GIF,ratio,(LSDB.Resol&7)+1);
context->Width=LSDB.Width; context->Width=LSDB.Width;
@ -4657,10 +4664,15 @@ void Save_GIF(T_IO_Context * context)
switch(context->Ratio) switch(context->Ratio)
{ {
case PIXEL_TALL: case PIXEL_TALL:
LSDB.Aspect = 17; // 1:2 case PIXEL_TALL2:
LSDB.Aspect = 17; // 1:2 = 2:4
break;
case PIXEL_TALL3:
LSDB.Aspect = 33; // 3:4
break; break;
case PIXEL_WIDE: case PIXEL_WIDE:
LSDB.Aspect = 113; // 2:1 case PIXEL_WIDE2:
LSDB.Aspect = 113; // 2:1 = 4:2
break; break;
default: default:
LSDB.Aspect = 0; // undefined, which is most frequent. LSDB.Aspect = 0; // undefined, which is most frequent.

View File

@ -1288,12 +1288,7 @@ void Init_context_layered_image(T_IO_Context * context, char *file_name, char *f
strcpy(context->Comment, Main.backups->Pages->Comment); strcpy(context->Comment, Main.backups->Pages->Comment);
context->Transparent_color=Main.backups->Pages->Transparent_color; context->Transparent_color=Main.backups->Pages->Transparent_color;
context->Background_transparent=Main.backups->Pages->Background_transparent; context->Background_transparent=Main.backups->Pages->Background_transparent;
if (Pixel_ratio == PIXEL_WIDE || Pixel_ratio == PIXEL_WIDE2) context->Ratio = Pixel_ratio;
context->Ratio=PIXEL_WIDE;
else if (Pixel_ratio == PIXEL_TALL || Pixel_ratio == PIXEL_TALL2 || Pixel_ratio == PIXEL_TALL3)
context->Ratio=PIXEL_TALL;
else
context->Ratio=PIXEL_SIMPLE;
context->Target_address=Main.backups->Pages->Image[0].Pixels; context->Target_address=Main.backups->Pages->Image[0].Pixels;
context->Pitch=Main.image_width; context->Pitch=Main.image_width;