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
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.
+
{
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
{
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