summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/imageviewer/gif/gif.c7
-rw-r--r--apps/plugins/imageviewer/gif/gif_decoder.c26
2 files changed, 10 insertions, 23 deletions
diff --git a/apps/plugins/imageviewer/gif/gif.c b/apps/plugins/imageviewer/gif/gif.c
index c3cad71e10..31fd11d9a6 100644
--- a/apps/plugins/imageviewer/gif/gif.c
+++ b/apps/plugins/imageviewer/gif/gif.c
@@ -110,10 +110,9 @@ static int load_image(char *filename, struct image_info *info,
110 110
111 if (!iv->running_slideshow) 111 if (!iv->running_slideshow)
112 { 112 {
113 rb->lcd_putsf(0, 2, "image %dx%d", 113 rb->lcd_putsf(0, 2, "file: %s",
114 p_decoder->width, 114 filename);
115 p_decoder->height); 115 rb->lcd_putsf(0, 3, "size: %dx%d",
116 rb->lcd_putsf(0, 3, "decoding %d*%d",
117 p_decoder->width, 116 p_decoder->width,
118 p_decoder->height); 117 p_decoder->height);
119 rb->lcd_update(); 118 rb->lcd_update();
diff --git a/apps/plugins/imageviewer/gif/gif_decoder.c b/apps/plugins/imageviewer/gif/gif_decoder.c
index 74330c3d1d..e45814cbef 100644
--- a/apps/plugins/imageviewer/gif/gif_decoder.c
+++ b/apps/plugins/imageviewer/gif/gif_decoder.c
@@ -125,30 +125,18 @@ void gif_open(char *filename, struct gif_decoder *d)
125 d->frames_count = 0; 125 d->frames_count = 0;
126} 126}
127 127
128static void set_canvas_background(GifPixelType *Line, pixel_t *out, 128static void set_canvas_background(pixel_t *out, GifFileType *GifFile)
129 GifFileType *GifFile)
130{ 129{
131 int i;
132
133 /* Reading Gif spec it seems one should always use background color 130 /* Reading Gif spec it seems one should always use background color
134 * in canvas but most real files omit this and sets background color to 0 131 * in canvas but most real files omit this and sets background color to 0
135 * (which IS valid index). We can choose to either conform to standard 132 * (which IS valid index). We can choose to either conform to standard
136 * (and wrongly display most of gifs with transparency) or stick to 133 * (and wrongly display most of gifs with transparency) or stick to
137 * common practise and treat background color 0 as transparent. 134 * common practise and treat background color 0 as transparent.
138 * I preffer the second. 135 * Moreover when dispose method is BACKGROUND spec suggest
136 * to reset canvas to global background color specified in gif BUT
137 * all renderers I know use transparency instead.
139 */ 138 */
140 if (GifFile->SColorMap && GifFile->SBackGroundColor != 0) 139 memset(out, PIXEL_TRANSPARENT, PIXELS_SZ);
141 {
142 memset(Line, GifFile->SBackGroundColor, GifFile->SWidth);
143
144 for(i=0; i<GifFile->SHeight; i++)
145 gif2pixels(Line, out, i, 0, GifFile->SWidth);
146 }
147 else
148 {
149 memset(out, PIXEL_TRANSPARENT, PIXELS_SZ);
150 }
151
152} 140}
153 141
154/* var names adhere to giflib coding style */ 142/* var names adhere to giflib coding style */
@@ -212,7 +200,7 @@ void gif_decode(struct gif_decoder *d,
212 } 200 }
213 201
214 /* Global background color */ 202 /* Global background color */
215 set_canvas_background(Line, pixels_buffer[0], GifFile); 203 set_canvas_background(pixels_buffer[0], GifFile);
216 204
217 bm.width = GifFile->SWidth; 205 bm.width = GifFile->SWidth;
218 bm.height = GifFile->SHeight; 206 bm.height = GifFile->SHeight;
@@ -335,7 +323,7 @@ void gif_decode(struct gif_decoder *d,
335 switch (GifFile->Image.GCB->DisposalMode) 323 switch (GifFile->Image.GCB->DisposalMode)
336 { 324 {
337 case DISPOSE_BACKGROUND: 325 case DISPOSE_BACKGROUND:
338 set_canvas_background(Line, pixels_buffer[buf_idx], 326 set_canvas_background(pixels_buffer[buf_idx],
339 GifFile); 327 GifFile);
340 break; 328 break;
341 329