mirror of
				https://github.com/webmproject/libwebp.git
				synced 2025-10-31 02:15:42 +01:00 
			
		
		
		
	Call png_get_channels() to see if image has alpha
After the png_read_update_info() call, call png_get_channels() to find out if the image has alpha. Change-Id: I6fa709418744b4de90d10ff96eaeefe454ffa290
This commit is contained in:
		
				
					committed by
					
						 James Zern
						James Zern
					
				
			
			
				
	
			
			
			
						parent
						
							7f0a341943
						
					
				
				
					commit
					8e965ccb0f
				
			| @@ -235,7 +235,7 @@ int ReadPNG(const uint8_t* const data, size_t data_size, | |||||||
|   volatile png_infop end_info = NULL; |   volatile png_infop end_info = NULL; | ||||||
|   PNGReadContext context = { NULL, 0, 0 }; |   PNGReadContext context = { NULL, 0, 0 }; | ||||||
|   int color_type, bit_depth, interlaced; |   int color_type, bit_depth, interlaced; | ||||||
|   int has_alpha; |   int num_channels; | ||||||
|   int num_passes; |   int num_passes; | ||||||
|   int p; |   int p; | ||||||
|   volatile int ok = 0; |   volatile int ok = 0; | ||||||
| @@ -293,9 +293,6 @@ int ReadPNG(const uint8_t* const data, size_t data_size, | |||||||
|   } |   } | ||||||
|   if (png_get_valid(png, info, PNG_INFO_tRNS)) { |   if (png_get_valid(png, info, PNG_INFO_tRNS)) { | ||||||
|     png_set_tRNS_to_alpha(png); |     png_set_tRNS_to_alpha(png); | ||||||
|     has_alpha = 1; |  | ||||||
|   } else { |  | ||||||
|     has_alpha = !!(color_type & PNG_COLOR_MASK_ALPHA); |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   // Apply gamma correction if needed. |   // Apply gamma correction if needed. | ||||||
| @@ -310,13 +307,16 @@ int ReadPNG(const uint8_t* const data, size_t data_size, | |||||||
|  |  | ||||||
|   if (!keep_alpha) { |   if (!keep_alpha) { | ||||||
|     png_set_strip_alpha(png); |     png_set_strip_alpha(png); | ||||||
|     has_alpha = 0; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   num_passes = png_set_interlace_handling(png); |   num_passes = png_set_interlace_handling(png); | ||||||
|   png_read_update_info(png, info); |   png_read_update_info(png, info); | ||||||
|  |  | ||||||
|   stride = (int64_t)(has_alpha ? 4 : 3) * width * sizeof(*rgb); |   num_channels = png_get_channels(png, info); | ||||||
|  |   if (num_channels != 3 && num_channels != 4) { | ||||||
|  |     goto Error; | ||||||
|  |   } | ||||||
|  |   stride = (int64_t)num_channels * width * sizeof(*rgb); | ||||||
|   if (stride != (int)stride || |   if (stride != (int)stride || | ||||||
|       !ImgIoUtilCheckSizeArgumentsOverflow(stride, height)) { |       !ImgIoUtilCheckSizeArgumentsOverflow(stride, height)) { | ||||||
|     goto Error; |     goto Error; | ||||||
| @@ -341,7 +341,7 @@ int ReadPNG(const uint8_t* const data, size_t data_size, | |||||||
|  |  | ||||||
|   pic->width = (int)width; |   pic->width = (int)width; | ||||||
|   pic->height = (int)height; |   pic->height = (int)height; | ||||||
|   ok = has_alpha ? WebPPictureImportRGBA(pic, rgb, (int)stride) |   ok = (num_channels == 4) ? WebPPictureImportRGBA(pic, rgb, (int)stride) | ||||||
|                            : WebPPictureImportRGB(pic, rgb, (int)stride); |                            : WebPPictureImportRGB(pic, rgb, (int)stride); | ||||||
|  |  | ||||||
|   if (!ok) { |   if (!ok) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user