Regard gif disposal method; fix bug #18
This commit is contained in:
parent
71e61b13b2
commit
4864f04455
2
Makefile
2
Makefile
|
@ -1,4 +1,4 @@
|
|||
VERSION = git-20110929
|
||||
VERSION = git-20111011
|
||||
|
||||
CC = gcc
|
||||
CFLAGS = -Wall -pedantic -O2
|
||||
|
|
12
image.c
12
image.c
|
@ -137,6 +137,7 @@ bool img_load_gif(img_t *img, const fileinfo_t *file) {
|
|||
int intoffset[] = { 0, 4, 2, 1 };
|
||||
int intjump[] = { 8, 8, 4, 2 };
|
||||
int transp = -1;
|
||||
unsigned int disposal = 0, prev_disposal = 0;
|
||||
unsigned int delay = 0;
|
||||
bool err = false;
|
||||
|
||||
|
@ -178,8 +179,7 @@ bool img_load_gif(img_t *img, const fileinfo_t *file) {
|
|||
if (delay)
|
||||
delay = MAX(delay, MIN_GIF_DELAY);
|
||||
|
||||
/* TODO: handle disposal method, section 23.c.iv of
|
||||
http://www.w3.org/Graphics/GIF/spec-gif89a.txt */
|
||||
disposal = (unsigned int) ext[1] >> 2 & 0x7;
|
||||
}
|
||||
ext = NULL;
|
||||
DGifGetExtensionNext(gif, &ext);
|
||||
|
@ -219,7 +219,7 @@ bool img_load_gif(img_t *img, const fileinfo_t *file) {
|
|||
if (i < y || i >= y + h || j < x || j >= x + w ||
|
||||
rows[i-y][j-x] == transp)
|
||||
{
|
||||
if (prev_frame != NULL)
|
||||
if (prev_disposal != 2 && prev_frame != NULL)
|
||||
*ptr = prev_frame[i * sw + j];
|
||||
else
|
||||
*ptr = bgpixel;
|
||||
|
@ -246,12 +246,14 @@ bool img_load_gif(img_t *img, const fileinfo_t *file) {
|
|||
}
|
||||
|
||||
imlib_context_set_image(im);
|
||||
prev_frame = imlib_image_get_data_for_reading_only();
|
||||
|
||||
imlib_image_set_format("gif");
|
||||
if (transp >= 0)
|
||||
imlib_image_set_has_alpha(1);
|
||||
|
||||
if (disposal != 3)
|
||||
prev_frame = imlib_image_get_data_for_reading_only();
|
||||
prev_disposal = disposal;
|
||||
|
||||
if (img->multi.cnt == img->multi.cap) {
|
||||
img->multi.cap *= 2;
|
||||
img->multi.frames = (img_frame_t*)
|
||||
|
|
Loading…
Reference in New Issue