diff options
Diffstat (limited to 'rdp/rdp_orders.c')
| -rw-r--r-- | rdp/rdp_orders.c | 29 | 
1 files changed, 28 insertions, 1 deletions
| diff --git a/rdp/rdp_orders.c b/rdp/rdp_orders.c index 3a452312..1dafae60 100644 --- a/rdp/rdp_orders.c +++ b/rdp/rdp_orders.c @@ -1084,7 +1084,7 @@ rdp_orders_convert_bitmap(int in_bpp, int out_bpp, char* bmpdata,    }    if (in_bpp == 8 && out_bpp == 8)    { -    out = g_malloc(width * height, 0); +    out = (char*)g_malloc(width * height, 0);      src = bmpdata;      dst = out;      for (i = 0; i < height; i++) @@ -1102,6 +1102,26 @@ rdp_orders_convert_bitmap(int in_bpp, int out_bpp, char* bmpdata,      }      return out;    } +  if (in_bpp == 8 && out_bpp == 16) +  { +    out = (char*)g_malloc(width * height * 2, 0); +    src = bmpdata; +    dst = out; +    for (i = 0; i < height; i++) +    { +      for (j = 0; j < width; j++) +      { +        pixel = *((unsigned char*)src); +        pixel = palette[pixel]; +        SPLITCOLOR32(red, green, blue, pixel); +        pixel = COLOR16(red, green, blue); +        *((unsigned short*)dst) = pixel; +        src++; +        dst += 2; +      } +    } +    return out; +  }    return 0;  } @@ -1126,5 +1146,12 @@ rdp_orders_convert_color(int in_bpp, int out_bpp, int in_color, int* palette)      pixel = COLOR8(red, green, blue);      return pixel;    } +  if (in_bpp == 8 && out_bpp == 16) +  { +    pixel = palette[in_color]; +    SPLITCOLOR32(red, green, blue, pixel); +    pixel = COLOR16(red, green, blue); +    return pixel; +  }    return 0;  } | 
