mirror of
				https://git.code.sf.net/p/libpng/code.git
				synced 2025-07-10 18:04:09 +02:00 
			
		
		
		
	[libpng15] Updated contrib/pngminus/pnm2png.c (Paul Stewart):
Fixed whitespace handling Added a call to png_set_packing() Initialize dimension values so if sscanf fails at least we have known invalid values.
This commit is contained in:
		
							parent
							
								
									a5173354d2
								
							
						
					
					
						commit
						dc7e768526
					
				
							
								
								
									
										13
									
								
								ANNOUNCE
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								ANNOUNCE
									
									
									
									
									
								
							| @ -1,5 +1,5 @@ | |||||||
| 
 | 
 | ||||||
| Libpng 1.5.16beta05 - May 7, 2013 | Libpng 1.5.16beta05 - May 9, 2013 | ||||||
| 
 | 
 | ||||||
| This is not intended to be a public release.  It will be replaced | This is not intended to be a public release.  It will be replaced | ||||||
| within a few weeks by a public version or by another test version. | within a few weeks by a public version or by another test version. | ||||||
| @ -46,9 +46,14 @@ Version 1.5.16beta04 [May 1, 2013] | |||||||
|   Expanded manual paragraph about writing private chunks, particularly |   Expanded manual paragraph about writing private chunks, particularly | ||||||
|     the need to call png_set_keep_unknown_chunks() when writing them. |     the need to call png_set_keep_unknown_chunks() when writing them. | ||||||
| 
 | 
 | ||||||
| Version 1.5.16beta05 [May 7, 2013] | Version 1.5.16beta05 [May 9, 2013] | ||||||
|   Check for EOF in contrib/pngminus/pnm2png.c (Paul Stewart). |   Updated contrib/pngminus/pnm2png.c (Paul Stewart): | ||||||
|   Ignore "#" delimited comments in input file to pnm2png.c. |     Check for EOF | ||||||
|  |     Ignore "#" delimited comments in input file to pnm2png.c. | ||||||
|  |     Fixed whitespace handling | ||||||
|  |     Added a call to png_set_packing() | ||||||
|  |     Initialize dimension values so if sscanf fails at least we have known | ||||||
|  |       invalid values. | ||||||
| 
 | 
 | ||||||
| Send comments/corrections/commendations to png-mng-implement at lists.sf.net | Send comments/corrections/commendations to png-mng-implement at lists.sf.net | ||||||
| (subscription required; visit | (subscription required; visit | ||||||
|  | |||||||
							
								
								
									
										11
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								CHANGES
									
									
									
									
									
								
							| @ -4090,9 +4090,14 @@ Version 1.5.16beta04 [May 1, 2013] | |||||||
|   Expanded manual paragraph about writing private chunks, particularly |   Expanded manual paragraph about writing private chunks, particularly | ||||||
|     the need to call png_set_keep_unknown_chunks() when writing them. |     the need to call png_set_keep_unknown_chunks() when writing them. | ||||||
| 
 | 
 | ||||||
| Version 1.5.16beta05 [May 7, 2013] | Version 1.5.16beta05 [May 9, 2013] | ||||||
|   Check for EOF in contrib/pngminus/pnm2png.c (Paul Stewart). |   Updated contrib/pngminus/pnm2png.c (Paul Stewart): | ||||||
|   Ignore "#" delimited comments in input file to pnm2png.c. |     Check for EOF | ||||||
|  |     Ignore "#" delimited comments in input file to pnm2png.c. | ||||||
|  |     Fixed whitespace handling | ||||||
|  |     Added a call to png_set_packing() | ||||||
|  |     Initialize dimension values so if sscanf fails at least we have known | ||||||
|  |       invalid values. | ||||||
| 
 | 
 | ||||||
| Send comments/corrections/commendations to png-mng-implement at lists.sf.net | Send comments/corrections/commendations to png-mng-implement at lists.sf.net | ||||||
| (subscription required; visit | (subscription required; visit | ||||||
|  | |||||||
| @ -197,15 +197,16 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, | |||||||
|   char          height_token[16]; |   char          height_token[16]; | ||||||
|   char          maxval_token[16]; |   char          maxval_token[16]; | ||||||
|   int           color_type; |   int           color_type; | ||||||
|   png_uint_32   width, alpha_width; |   png_uint_32   width = 0, alpha_width = 0; | ||||||
|   png_uint_32   height, alpha_height; |   png_uint_32   height = 0, alpha_height = 0; | ||||||
|   png_uint_32   maxval; |   png_uint_32   maxval = 0; | ||||||
|   int           bit_depth = 0; |   int           bit_depth = 0; | ||||||
|   int           channels; |   int           channels; | ||||||
|   int           alpha_depth = 0; |   int           alpha_depth = 0; | ||||||
|   int           alpha_present; |   int           alpha_present; | ||||||
|   int           row, col; |   int           row, col; | ||||||
|   BOOL          raw, alpha_raw = FALSE; |   BOOL          raw, alpha_raw = FALSE; | ||||||
|  |   BOOL          packed_bitmap = FALSE; | ||||||
|   png_uint_32   tmp16; |   png_uint_32   tmp16; | ||||||
|   int           i; |   int           i; | ||||||
| 
 | 
 | ||||||
| @ -220,7 +221,12 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, | |||||||
|   { |   { | ||||||
|     raw = (type_token[1] == '4'); |     raw = (type_token[1] == '4'); | ||||||
|     color_type = PNG_COLOR_TYPE_GRAY; |     color_type = PNG_COLOR_TYPE_GRAY; | ||||||
|  |     get_token(pnm_file, width_token); | ||||||
|  |     sscanf (width_token, "%lu", &width); | ||||||
|  |     get_token(pnm_file, height_token); | ||||||
|  |     sscanf (height_token, "%lu", &height); | ||||||
|     bit_depth = 1; |     bit_depth = 1; | ||||||
|  |     packed_bitmap = TRUE; | ||||||
|   } |   } | ||||||
|   else if ((type_token[1] == '2') || (type_token[1] == '5')) |   else if ((type_token[1] == '2') || (type_token[1] == '5')) | ||||||
|   { |   { | ||||||
| @ -329,8 +335,12 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, | |||||||
| 
 | 
 | ||||||
|   alpha_present = (channels - 1) % 2; |   alpha_present = (channels - 1) % 2; | ||||||
| 
 | 
 | ||||||
|   /* row_bytes is the width x number of channels x (bit-depth / 8) */ |   if (packed_bitmap) | ||||||
|   row_bytes = width * channels * ((bit_depth <= 8) ? 1 : 2); |     /* row data is as many bytes as can fit width x channels x bit_depth */ | ||||||
|  |     row_bytes = (width * channels * bit_depth + 7) / 8; | ||||||
|  |   else | ||||||
|  |     /* row_bytes is the width x number of channels x (bit-depth / 8) */ | ||||||
|  |     row_bytes = width * channels * ((bit_depth <= 8) ? 1 : 2); | ||||||
| 
 | 
 | ||||||
|   if ((png_pixels = (png_byte *) malloc (row_bytes * height * sizeof (png_byte))) == NULL) |   if ((png_pixels = (png_byte *) malloc (row_bytes * height * sizeof (png_byte))) == NULL) | ||||||
|     return FALSE; |     return FALSE; | ||||||
| @ -340,40 +350,45 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, | |||||||
| 
 | 
 | ||||||
|   for (row = 0; row < height; row++) |   for (row = 0; row < height; row++) | ||||||
|   { |   { | ||||||
|     for (col = 0; col < width; col++) |     if (packed_bitmap) { | ||||||
|     { |       for (i = 0; i < row_bytes; i++) | ||||||
|       for (i = 0; i < (channels - alpha_present); i++) |         /* png supports this format natively so no conversion is needed */ | ||||||
|  |         *pix_ptr++ = get_data (pnm_file, 8); | ||||||
|  |     } else { | ||||||
|  |       for (col = 0; col < width; col++) | ||||||
|       { |       { | ||||||
|         if (raw) |         for (i = 0; i < (channels - alpha_present); i++) | ||||||
|           *pix_ptr++ = get_data (pnm_file, bit_depth); |         { | ||||||
|         else |           if (raw) | ||||||
|           if (bit_depth <= 8) |             *pix_ptr++ = get_data (pnm_file, bit_depth); | ||||||
|             *pix_ptr++ = get_value (pnm_file, bit_depth); |  | ||||||
|           else |           else | ||||||
|           { |             if (bit_depth <= 8) | ||||||
|             tmp16 = get_value (pnm_file, bit_depth); |               *pix_ptr++ = get_value (pnm_file, bit_depth); | ||||||
|             *pix_ptr = (png_byte) ((tmp16 >> 8) & 0xFF); |             else | ||||||
|             pix_ptr++; |             { | ||||||
|             *pix_ptr = (png_byte) (tmp16 & 0xFF); |               tmp16 = get_value (pnm_file, bit_depth); | ||||||
|             pix_ptr++; |               *pix_ptr = (png_byte) ((tmp16 >> 8) & 0xFF); | ||||||
|           } |               pix_ptr++; | ||||||
|       } |               *pix_ptr = (png_byte) (tmp16 & 0xFF); | ||||||
|  |               pix_ptr++; | ||||||
|  |             } | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|       if (alpha) /* read alpha-channel from pgm file */ |         if (alpha) /* read alpha-channel from pgm file */ | ||||||
|       { |         { | ||||||
|         if (alpha_raw) |           if (alpha_raw) | ||||||
|           *pix_ptr++ = get_data (alpha_file, alpha_depth); |             *pix_ptr++ = get_data (alpha_file, alpha_depth); | ||||||
|         else |  | ||||||
|           if (alpha_depth <= 8) |  | ||||||
|             *pix_ptr++ = get_value (alpha_file, bit_depth); |  | ||||||
|           else |           else | ||||||
|           { |             if (alpha_depth <= 8) | ||||||
|             tmp16 = get_value (alpha_file, bit_depth); |               *pix_ptr++ = get_value (alpha_file, bit_depth); | ||||||
|             *pix_ptr++ = (png_byte) ((tmp16 >> 8) & 0xFF); |             else | ||||||
|             *pix_ptr++ = (png_byte) (tmp16 & 0xFF); |             { | ||||||
|           } |               tmp16 = get_value (alpha_file, bit_depth); | ||||||
|       } /* if alpha */ |               *pix_ptr++ = (png_byte) ((tmp16 >> 8) & 0xFF); | ||||||
| 
 |               *pix_ptr++ = (png_byte) (tmp16 & 0xFF); | ||||||
|  |             } | ||||||
|  |         } /* if alpha */ | ||||||
|  |       } /* if packed_bitmap */ | ||||||
|     } /* end for col */ |     } /* end for col */ | ||||||
|   } /* end for row */ |   } /* end for row */ | ||||||
| 
 | 
 | ||||||
| @ -390,6 +405,12 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, | |||||||
|     return FALSE; |     return FALSE; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   if (packed_bitmap == TRUE) | ||||||
|  |   { | ||||||
|  |     png_set_packing (png_ptr); | ||||||
|  |     png_set_invert_mono (png_ptr); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   /* setjmp() must be called in every function that calls a PNG-reading libpng function */ |   /* setjmp() must be called in every function that calls a PNG-reading libpng function */ | ||||||
|   if (setjmp (png_jmpbuf(png_ptr))) |   if (setjmp (png_jmpbuf(png_ptr))) | ||||||
|   { |   { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Glenn Randers-Pehrson
						Glenn Randers-Pehrson