From: Jeonghyun Yun <jh0506.yun@samsung.com>

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.



SVN revision: 57076
This commit is contained in:
Jeonghyun Yun 2011-02-16 05:44:01 +00:00 committed by Carsten Haitzler
parent d704222f1c
commit 2c428c4c15
2 changed files with 40 additions and 30 deletions

View File

@ -93,3 +93,9 @@
transition.
* A lot of textblock speed improvements and reduced memory footprint.
2011-02-16 Jeonghyun Yun
* Patch from Jeonghyun Yun <jh0506.yun@samsung.com> that
improves BMP loader support to handle malformed RLE BMP's that
encode more pixels per line than the image actuall has.

View File

@ -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