From b66a066fd677dd16e2e480944f3a57376bee2349 Mon Sep 17 00:00:00 2001 From: raster Date: Wed, 16 Feb 2011 05:44:01 +0000 Subject: [PATCH] From: Jeonghyun Yun Subject: Re: [E-devel] [Patch] evas_image_load_bmp small patch When I tested some bmp files on evas, I found one bmp file is not displayed. But this bmp file is displayed on windows and linux gimp and etc. So I checked this bmp file, this file have 208 data per line despite 207 pixel per line!! I fixed code to skip the data when data is more than width instead of break. I think this is not bug but evas policy problem. git-svn-id: http://svn.enlightenment.org/svn/e/trunk/evas@57076 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- ChangeLog | 6 +++ src/modules/loaders/bmp/evas_image_load_bmp.c | 64 ++++++++++++++------------- 2 files changed, 40 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index 257ff48..bafaf5b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -93,3 +93,9 @@ transition. * A lot of textblock speed improvements and reduced memory footprint. +2011-02-16 Jeonghyun Yun + + * Patch from Jeonghyun Yun that + improves BMP loader support to handle malformed RLE BMP's that + encode more pixels per line than the image actuall has. + diff --git a/src/modules/loaders/bmp/evas_image_load_bmp.c b/src/modules/loaders/bmp/evas_image_load_bmp.c index 46a726a..a06d807 100644 --- a/src/modules/loaders/bmp/evas_image_load_bmp.c +++ b/src/modules/loaders/bmp/evas_image_load_bmp.c @@ -681,32 +681,34 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key { if (p[0]) { - unsigned int col1 = pal[p[1] >> 4]; - unsigned int col2 = pal[p[1] & 0xf]; + if ((x + p[0]) <= wpad) + { + unsigned int col1 = pal[p[1] >> 4]; + unsigned int col2 = pal[p[1] & 0xf]; - if ((x + p[0]) > wpad) break; - count = p[0] / 2; - while (count > 0) - { - if (x < w) + count = p[0] / 2; + while (count > 0) { - pix[0] = col1; - x++; + if (x < w) + { + pix[0] = col1; + x++; + } + if (x < w) + { + pix[1] = col2; + x++; + } + pix += 2; + count--; } - if (x < w) + if (p[0] & 0x1) { - pix[1] = col2; + *pix = col1; x++; + pix++; } - pix += 2; - count--; - } - if (p[0] & 0x1) - { - *pix = col1; - x++; - pix++; - } + } p += 2; } else @@ -809,17 +811,19 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key { if (p[0]) { - unsigned int col = pal[p[1]]; + if ((x + p[0]) <= w) + { + unsigned int col = pal[p[1]]; - count = p[0]; - if ((x + p[0]) > w) break; - while (count > 0) - { - *pix = col; - pix++; - count--; - } - x += p[0]; + count = p[0]; + while (count > 0) + { + *pix = col; + pix++; + count--; + } + x += p[0]; + } p += 2; } else -- 2.7.4