summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/easylogo/easylogo.c78
1 files changed, 60 insertions, 18 deletions
diff --git a/tools/easylogo/easylogo.c b/tools/easylogo/easylogo.c
index 41e5838..d9b33fa 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);
+
+ 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(&rgb565_logo, outputfile, varname);
+ image_free(&rgb565_logo);
+ } else {
+ printf("S");
+ image_save_header(&rgb888_logo, outputfile, varname);
}
- /* Save it into a header format */
-
- printf ("S");
- image_save_header (use_rgb ? &rgb_logo : &yuyv_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");