| 
									
										
										
										
											2010-06-09 01:37:08 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |     Jonathan Dummer | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Image helper functions | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     MIT license | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef HEADER_IMAGE_HELPER
 | 
					
						
							|  |  |  | #define HEADER_IMAGE_HELPER
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | extern "C" { | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  | 	This function upscales an image. | 
					
						
							|  |  |  | 	Not to be used to create MIPmaps, | 
					
						
							|  |  |  | 	but to make it square, | 
					
						
							|  |  |  | 	or to make it a power-of-two sized. | 
					
						
							|  |  |  | **/ | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | 	up_scale_image | 
					
						
							|  |  |  | 	( | 
					
						
							|  |  |  | 		const unsigned char* const orig, | 
					
						
							|  |  |  | 		int width, int height, int channels, | 
					
						
							|  |  |  | 		unsigned char* resampled, | 
					
						
							|  |  |  | 		int resampled_width, int resampled_height | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  | 	This function downscales an image. | 
					
						
							|  |  |  | 	Used for creating MIPmaps, | 
					
						
							|  |  |  | 	the incoming image should be a | 
					
						
							|  |  |  | 	power-of-two sized. | 
					
						
							|  |  |  | **/ | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | 	mipmap_image | 
					
						
							|  |  |  | 	( | 
					
						
							|  |  |  | 		const unsigned char* const orig, | 
					
						
							|  |  |  | 		int width, int height, int channels, | 
					
						
							|  |  |  | 		unsigned char* resampled, | 
					
						
							|  |  |  | 		int block_size_x, int block_size_y | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  | 	This function takes the RGB components of the image | 
					
						
							|  |  |  | 	and scales each channel from [0,255] to [16,235]. | 
					
						
							|  |  |  | 	This makes the colors "Safe" for display on NTSC | 
					
						
							|  |  |  | 	displays.  Note that this is _NOT_ a good idea for | 
					
						
							|  |  |  | 	loading images like normal- or height-maps! | 
					
						
							|  |  |  | **/ | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | 	scale_image_RGB_to_NTSC_safe | 
					
						
							|  |  |  | 	( | 
					
						
							|  |  |  | 		unsigned char* orig, | 
					
						
							|  |  |  | 		int width, int height, int channels | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  | 	This function takes the RGB components of the image | 
					
						
							|  |  |  | 	and converts them into YCoCg.  3 components will be | 
					
						
							|  |  |  | 	re-ordered to CoYCg (for optimum DXT1 compression), | 
					
						
							|  |  |  | 	while 4 components will be ordered CoCgAY (for DXT5 | 
					
						
							|  |  |  | 	compression). | 
					
						
							|  |  |  | **/ | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | 	convert_RGB_to_YCoCg | 
					
						
							|  |  |  | 	( | 
					
						
							|  |  |  | 		unsigned char* orig, | 
					
						
							|  |  |  | 		int width, int height, int channels | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  | 	This function takes the YCoCg components of the image | 
					
						
							|  |  |  | 	and converts them into RGB.  See above. | 
					
						
							|  |  |  | **/ | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | 	convert_YCoCg_to_RGB | 
					
						
							|  |  |  | 	( | 
					
						
							|  |  |  | 		unsigned char* orig, | 
					
						
							|  |  |  | 		int width, int height, int channels | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  | 	Converts an HDR image from an array | 
					
						
							|  |  |  | 	of unsigned chars (RGBE) to RGBdivA | 
					
						
							|  |  |  | 	\return 0 if failed, otherwise returns 1 | 
					
						
							|  |  |  | **/ | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | 	RGBE_to_RGBdivA | 
					
						
							|  |  |  | 	( | 
					
						
							|  |  |  | 		unsigned char *image, | 
					
						
							|  |  |  | 		int width, int height, | 
					
						
							|  |  |  | 		int rescale_to_max | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  | 	Converts an HDR image from an array | 
					
						
							|  |  |  | 	of unsigned chars (RGBE) to RGBdivA2 | 
					
						
							|  |  |  | 	\return 0 if failed, otherwise returns 1 | 
					
						
							|  |  |  | **/ | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | 	RGBE_to_RGBdivA2 | 
					
						
							|  |  |  | 	( | 
					
						
							|  |  |  | 		unsigned char *image, | 
					
						
							|  |  |  | 		int width, int height, | 
					
						
							|  |  |  | 		int rescale_to_max | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* HEADER_IMAGE_HELPER	*/
 |