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 | ||||
| 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 | ||||
|     the need to call png_set_keep_unknown_chunks() when writing them. | ||||
| 
 | ||||
| Version 1.5.16beta05 [May 7, 2013] | ||||
|   Check for EOF in contrib/pngminus/pnm2png.c (Paul Stewart). | ||||
|   Ignore "#" delimited comments in input file to pnm2png.c. | ||||
| Version 1.5.16beta05 [May 9, 2013] | ||||
|   Updated contrib/pngminus/pnm2png.c (Paul Stewart): | ||||
|     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 | ||||
| (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 | ||||
|     the need to call png_set_keep_unknown_chunks() when writing them. | ||||
| 
 | ||||
| Version 1.5.16beta05 [May 7, 2013] | ||||
|   Check for EOF in contrib/pngminus/pnm2png.c (Paul Stewart). | ||||
|   Ignore "#" delimited comments in input file to pnm2png.c. | ||||
| Version 1.5.16beta05 [May 9, 2013] | ||||
|   Updated contrib/pngminus/pnm2png.c (Paul Stewart): | ||||
|     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 | ||||
| (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          maxval_token[16]; | ||||
|   int           color_type; | ||||
|   png_uint_32   width, alpha_width; | ||||
|   png_uint_32   height, alpha_height; | ||||
|   png_uint_32   maxval; | ||||
|   png_uint_32   width = 0, alpha_width = 0; | ||||
|   png_uint_32   height = 0, alpha_height = 0; | ||||
|   png_uint_32   maxval = 0; | ||||
|   int           bit_depth = 0; | ||||
|   int           channels; | ||||
|   int           alpha_depth = 0; | ||||
|   int           alpha_present; | ||||
|   int           row, col; | ||||
|   BOOL          raw, alpha_raw = FALSE; | ||||
|   BOOL          packed_bitmap = FALSE; | ||||
|   png_uint_32   tmp16; | ||||
|   int           i; | ||||
| 
 | ||||
| @ -220,7 +221,12 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, | ||||
|   { | ||||
|     raw = (type_token[1] == '4'); | ||||
|     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; | ||||
|     packed_bitmap = TRUE; | ||||
|   } | ||||
|   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; | ||||
| 
 | ||||
|   /* row_bytes is the width x number of channels x (bit-depth / 8) */ | ||||
|   row_bytes = width * channels * ((bit_depth <= 8) ? 1 : 2); | ||||
|   if (packed_bitmap) | ||||
|     /* 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) | ||||
|     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 (col = 0; col < width; col++) | ||||
|     { | ||||
|       for (i = 0; i < (channels - alpha_present); i++) | ||||
|     if (packed_bitmap) { | ||||
|       for (i = 0; i < row_bytes; 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) | ||||
|           *pix_ptr++ = get_data (pnm_file, bit_depth); | ||||
|         else | ||||
|           if (bit_depth <= 8) | ||||
|             *pix_ptr++ = get_value (pnm_file, bit_depth); | ||||
|         for (i = 0; i < (channels - alpha_present); i++) | ||||
|         { | ||||
|           if (raw) | ||||
|             *pix_ptr++ = get_data (pnm_file, bit_depth); | ||||
|           else | ||||
|           { | ||||
|             tmp16 = get_value (pnm_file, bit_depth); | ||||
|             *pix_ptr = (png_byte) ((tmp16 >> 8) & 0xFF); | ||||
|             pix_ptr++; | ||||
|             *pix_ptr = (png_byte) (tmp16 & 0xFF); | ||||
|             pix_ptr++; | ||||
|           } | ||||
|       } | ||||
|             if (bit_depth <= 8) | ||||
|               *pix_ptr++ = get_value (pnm_file, bit_depth); | ||||
|             else | ||||
|             { | ||||
|               tmp16 = get_value (pnm_file, bit_depth); | ||||
|               *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_raw) | ||||
|           *pix_ptr++ = get_data (alpha_file, alpha_depth); | ||||
|         else | ||||
|           if (alpha_depth <= 8) | ||||
|             *pix_ptr++ = get_value (alpha_file, bit_depth); | ||||
|         if (alpha) /* read alpha-channel from pgm file */ | ||||
|         { | ||||
|           if (alpha_raw) | ||||
|             *pix_ptr++ = get_data (alpha_file, alpha_depth); | ||||
|           else | ||||
|           { | ||||
|             tmp16 = get_value (alpha_file, bit_depth); | ||||
|             *pix_ptr++ = (png_byte) ((tmp16 >> 8) & 0xFF); | ||||
|             *pix_ptr++ = (png_byte) (tmp16 & 0xFF); | ||||
|           } | ||||
|       } /* if alpha */ | ||||
| 
 | ||||
|             if (alpha_depth <= 8) | ||||
|               *pix_ptr++ = get_value (alpha_file, bit_depth); | ||||
|             else | ||||
|             { | ||||
|               tmp16 = get_value (alpha_file, bit_depth); | ||||
|               *pix_ptr++ = (png_byte) ((tmp16 >> 8) & 0xFF); | ||||
|               *pix_ptr++ = (png_byte) (tmp16 & 0xFF); | ||||
|             } | ||||
|         } /* if alpha */ | ||||
|       } /* if packed_bitmap */ | ||||
|     } /* end for col */ | ||||
|   } /* end for row */ | ||||
| 
 | ||||
| @ -390,6 +405,12 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, | ||||
|     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 */ | ||||
|   if (setjmp (png_jmpbuf(png_ptr))) | ||||
|   { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Glenn Randers-Pehrson
						Glenn Randers-Pehrson