diff options
| -rw-r--r-- | tools/easylogo/easylogo.c | 76 | 
1 files changed, 59 insertions, 17 deletions
| diff --git a/tools/easylogo/easylogo.c b/tools/easylogo/easylogo.c index 41e583852..d9b33faef 100644 --- a/tools/easylogo/easylogo.c +++ b/tools/easylogo/easylogo.c @@ -276,6 +276,35 @@ int image_rgb_to_yuyv (image_t * rgb_image, image_t * yuyv_image)  	return 0;  } +int image_rgb888_to_rgb565(image_t *rgb888_image, image_t *rgb565_image) +{ +	rgb_t *rgb_ptr = (rgb_t *) rgb888_image->data; +	unsigned short *dest; +	int count = 0; + +	rgb565_image->pixel_size = 2; +	rgb565_image->bpp = 16; +	rgb565_image->yuyv = 0; +	rgb565_image->width = rgb888_image->width; +	rgb565_image->height = rgb888_image->height; +	rgb565_image->pixels = rgb565_image->width * rgb565_image->height; +	rgb565_image->size = rgb565_image->pixels * rgb565_image->pixel_size; +	dest = (unsigned short *) (rgb565_image->data = +				   xmalloc(rgb565_image->size)); +	rgb565_image->palette = 0; +	rgb565_image->palette_size = 0; + +	while ((count++) < rgb888_image->pixels) { + +		*dest++ = ((rgb_ptr->b & 0xF8) << 8) | +			((rgb_ptr->g & 0xFC) << 3) | +			(rgb_ptr->r >> 3); +		rgb_ptr++; +	} + +	return 0; +} +  int use_gzip = 0;  int image_save_header (image_t * image, char *filename, char *varname) @@ -434,7 +463,8 @@ static void usage (int exit_status)  		"Syntax:	easylogo [options] inputfile [outputvar [outputfile]]\n"  		"\n"  		"Options:\n" -		"  -r     Output RGB instead of YUYV\n" +		"  -r     Output RGB888 instead of YUYV\n" +		"  -s     Output RGB565 instead of YUYV\n"  		"  -g     Compress with gzip\n"  		"  -b     Preallocate space in bss for decompressing image\n"  		"  -h     Help output\n" @@ -449,20 +479,25 @@ static void usage (int exit_status)  int main (int argc, char *argv[])  {  	int c; -	bool use_rgb = false; +	bool use_rgb888 = false; +	bool use_rgb565 = false;  	char inputfile[DEF_FILELEN],  		outputfile[DEF_FILELEN], varname[DEF_FILELEN]; -	image_t rgb_logo, yuyv_logo; +	image_t rgb888_logo, rgb565_logo, yuyv_logo; -	while ((c = getopt(argc, argv, "hrgb")) > 0) { +	while ((c = getopt(argc, argv, "hrsgb")) > 0) {  		switch (c) {  		case 'h':  			usage (0);  			break;  		case 'r': -			use_rgb = true; -			puts ("Using 24-bit RGB Output Fromat"); +			use_rgb888 = true; +			puts("Using 24-bit RGB888 Output Fromat"); +			break; +		case 's': +			use_rgb565 = true; +			puts("Using 16-bit RGB565 Output Fromat");  			break;  		case 'g':  			use_gzip |= 0x1; @@ -512,28 +547,35 @@ int main (int argc, char *argv[])  	/* Import TGA logo */  	printf ("L"); -	if (image_load_tga (&rgb_logo, inputfile) < 0) { +	if (image_load_tga(&rgb888_logo, inputfile) < 0) {  		printf ("input file not found!\n");  		exit (1);  	} -	/* Convert it to YUYV format if wanted */ +	/* Convert, save, and free the image */ -	if (!use_rgb) { +	if (!use_rgb888 && !use_rgb565) {  		printf ("C"); -		image_rgb_to_yuyv (&rgb_logo, &yuyv_logo); -	} +		image_rgb_to_yuyv(&rgb888_logo, &yuyv_logo); -	/* Save it into a header format */ +		printf("S"); +		image_save_header(&yuyv_logo, outputfile, varname); +		image_free(&yuyv_logo); +	} else if (use_rgb565) { +		printf("C"); +		image_rgb888_to_rgb565(&rgb888_logo, &rgb565_logo); -	printf ("S"); -	image_save_header (use_rgb ? &rgb_logo : &yuyv_logo, outputfile, varname); +		printf("S"); +		image_save_header(&rgb565_logo, outputfile, varname); +		image_free(&rgb565_logo); +	} else { +		printf("S"); +		image_save_header(&rgb888_logo, outputfile, varname); +	}  	/* Free original image and copy */ -	image_free (&rgb_logo); -	if (!use_rgb) -		image_free (&yuyv_logo); +	image_free(&rgb888_logo);  	printf ("\n"); |