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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Bert Münnich
						Bert Münnich