mirror of
				https://github.com/webmproject/libwebp.git
				synced 2025-10-31 18:35:41 +01:00 
			
		
		
		
	Make gif transparent color to be transparent black
Change it from transparent white to transparent black, which matches the transparent color assumed in Webp dispose-to-background method. Also pre-multiply background colors before comparison in anim_diff, just as what is done with regular pixel values. Change-Id: I5a790522df21619c666ce499f73e42294ed276f2
This commit is contained in:
		| @@ -110,6 +110,20 @@ static int CompareValues(uint32_t a, uint32_t b, const char* output_str) { | |||||||
|   return 1; |   return 1; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static int CompareBackgroundColor(uint32_t bg1, uint32_t bg2, int premultiply) { | ||||||
|  |   if (premultiply) { | ||||||
|  |     const int alpha1 = (bg1 >> 24) & 0xff; | ||||||
|  |     const int alpha2 = (bg2 >> 24) & 0xff; | ||||||
|  |     if (alpha1 == 0 && alpha2 == 0) return 1; | ||||||
|  |   } | ||||||
|  |   if (bg1 != bg2) { | ||||||
|  |     fprintf(stderr, "Background color mismatch: 0x%08x vs 0x%08x\n", | ||||||
|  |             bg1, bg2); | ||||||
|  |     return 0; | ||||||
|  |   } | ||||||
|  |   return 1; | ||||||
|  | } | ||||||
|  |  | ||||||
| // Note: As long as frame durations and reconstructed frames are identical, it | // Note: As long as frame durations and reconstructed frames are identical, it | ||||||
| // is OK for other aspects like offsets, dispose/blend method to vary. | // is OK for other aspects like offsets, dispose/blend method to vary. | ||||||
| static int CompareAnimatedImagePair(const AnimatedImage* const img1, | static int CompareAnimatedImagePair(const AnimatedImage* const img1, | ||||||
| @@ -131,8 +145,8 @@ static int CompareAnimatedImagePair(const AnimatedImage* const img1, | |||||||
|   if (is_multi_frame_image) {  // Checks relevant for multi-frame images only. |   if (is_multi_frame_image) {  // Checks relevant for multi-frame images only. | ||||||
|     ok = CompareValues(img1->loop_count, img2->loop_count, |     ok = CompareValues(img1->loop_count, img2->loop_count, | ||||||
|                        "Loop count mismatch") && ok; |                        "Loop count mismatch") && ok; | ||||||
|     ok = CompareValues(img1->bgcolor, img2->bgcolor, |     ok = CompareBackgroundColor(img1->bgcolor, img2->bgcolor, | ||||||
|                        "Background color mismatch") && ok; |                                 premultiply) && ok; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   for (i = 0; i < img1->num_frames; ++i) { |   for (i = 0; i < img1->num_frames; ++i) { | ||||||
|   | |||||||
| @@ -396,7 +396,7 @@ static uint32_t GetBackgroundColorGIF(GifFileType* gif) { | |||||||
|   const ColorMapObject* const color_map = gif->SColorMap; |   const ColorMapObject* const color_map = gif->SColorMap; | ||||||
|   if (transparent_index != NO_TRANSPARENT_COLOR && |   if (transparent_index != NO_TRANSPARENT_COLOR && | ||||||
|       gif->SBackGroundColor == transparent_index) { |       gif->SBackGroundColor == transparent_index) { | ||||||
|     return 0x00ffffff;  // Special case: transparent white. |     return 0x00000000;  // Special case: transparent black. | ||||||
|   } else if (color_map == NULL || color_map->Colors == NULL |   } else if (color_map == NULL || color_map->Colors == NULL | ||||||
|              || gif->SBackGroundColor >= color_map->ColorCount) { |              || gif->SBackGroundColor >= color_map->ColorCount) { | ||||||
|     return 0xffffffff;  // Invalid: assume white. |     return 0xffffffff;  // Invalid: assume white. | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ | |||||||
| #include "webp/encode.h" | #include "webp/encode.h" | ||||||
| #include "webp/mux_types.h" | #include "webp/mux_types.h" | ||||||
|  |  | ||||||
| #define GIF_TRANSPARENT_COLOR 0x00ffffff | #define GIF_TRANSPARENT_COLOR 0x00000000 | ||||||
| #define GIF_WHITE_COLOR       0xffffffff | #define GIF_WHITE_COLOR       0xffffffff | ||||||
| #define GIF_TRANSPARENT_MASK  0x01 | #define GIF_TRANSPARENT_MASK  0x01 | ||||||
| #define GIF_DISPOSE_MASK      0x07 | #define GIF_DISPOSE_MASK      0x07 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user