From ebf0cd6728be9b8cd70d8365fe441f8822397098 Mon Sep 17 00:00:00 2001 From: Jiyoun Park Date: Wed, 5 Jun 2013 15:26:09 +0900 Subject: [PATCH] Evas: fix gif cannot decode alpha value correctly. --- ChangeLog | 4 +++ NEWS | 2 ++ .../evas/loaders/gif/evas_image_load_gif.c | 32 +++++++++++++------ 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0921699143..948b2b86a0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-06-05 Jiyou Park + + * Evas: Fix gif cannot decode alpha value correctly. + 2013-06-04 Jean-Philippe Andre * Evas: improve stability of Evas_Cserve2. diff --git a/NEWS b/NEWS index d6af31d3f4..22298036d6 100644 --- a/NEWS +++ b/NEWS @@ -327,3 +327,5 @@ Fixes: * Fix eeze sensors to not segv on shutdown * Evas: correctly detect if a loader support asynchronous preloading. * Evas: improve stability of Evas_Cserve2. + * Evas: Fix gif cannot decode alpha value correctly. + diff --git a/src/modules/evas/loaders/gif/evas_image_load_gif.c b/src/modules/evas/loaders/gif/evas_image_load_gif.c index 40c2aa81d4..e3de8a5934 100644 --- a/src/modules/evas/loaders/gif/evas_image_load_gif.c +++ b/src/modules/evas/loaders/gif/evas_image_load_gif.c @@ -451,10 +451,17 @@ _evas_image_load_frame_image_data(Eina_File *f, } else { - r = cmap->Colors[rows[i1][j1 * scale_ratio]].Red; - g = cmap->Colors[rows[i1][j1 * scale_ratio]].Green; - b = cmap->Colors[rows[i1][j1 * scale_ratio]].Blue; - *ptr++ = ARGB_JOIN(0xff, r, g, b); + if (rows[i][j * scale_ratio] == alpha) + { + ptr++ ; + } + else + { + r = cmap->Colors[rows[i1][j1 * scale_ratio]].Red; + g = cmap->Colors[rows[i1][j1 * scale_ratio]].Green; + b = cmap->Colors[rows[i1][j1 * scale_ratio]].Blue; + *ptr++ = ARGB_JOIN(0xff, r, g, b); + } } } } @@ -488,10 +495,17 @@ _evas_image_load_frame_image_data(Eina_File *f, } else { - r = cmap->Colors[rows[i1][j1 * scale_ratio]].Red; - g = cmap->Colors[rows[i1][j1 * scale_ratio]].Green; - b = cmap->Colors[rows[i1][j1 * scale_ratio]].Blue; - *ptr++ = ARGB_JOIN(0xff, r, g, b); + if (rows[i][j * scale_ratio] == alpha) + { + ptr++ ; + } + else + { + r = cmap->Colors[rows[i1][j1 * scale_ratio]].Red; + g = cmap->Colors[rows[i1][j1 * scale_ratio]].Green; + b = cmap->Colors[rows[i1][j1 * scale_ratio]].Blue; + *ptr++ = ARGB_JOIN(0xff, r, g, b); + } } } } @@ -538,7 +552,7 @@ _evas_image_load_frame_image_data(Eina_File *f, } else { - if (rows[i1][j1] == alpha) + if (rows[i1][j1 * scale_ratio] == alpha) { ptr++; }