|
@@ -276,6 +276,35 @@ int image_rgb_to_yuyv (image_t * rgb_image, image_t * yuyv_image)
|
|
return 0;
|
|
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 use_gzip = 0;
|
|
|
|
|
|
int image_save_header (image_t * image, char *filename, char *varname)
|
|
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"
|
|
"Syntax: easylogo [options] inputfile [outputvar [outputfile]]\n"
|
|
"\n"
|
|
"\n"
|
|
"Options:\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"
|
|
" -g Compress with gzip\n"
|
|
" -b Preallocate space in bss for decompressing image\n"
|
|
" -b Preallocate space in bss for decompressing image\n"
|
|
" -h Help output\n"
|
|
" -h Help output\n"
|
|
@@ -449,20 +479,25 @@ static void usage (int exit_status)
|
|
int main (int argc, char *argv[])
|
|
int main (int argc, char *argv[])
|
|
{
|
|
{
|
|
int c;
|
|
int c;
|
|
- bool use_rgb = false;
|
|
|
|
|
|
+ bool use_rgb888 = false;
|
|
|
|
+ bool use_rgb565 = false;
|
|
char inputfile[DEF_FILELEN],
|
|
char inputfile[DEF_FILELEN],
|
|
outputfile[DEF_FILELEN], varname[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) {
|
|
switch (c) {
|
|
case 'h':
|
|
case 'h':
|
|
usage (0);
|
|
usage (0);
|
|
break;
|
|
break;
|
|
case 'r':
|
|
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;
|
|
break;
|
|
case 'g':
|
|
case 'g':
|
|
use_gzip |= 0x1;
|
|
use_gzip |= 0x1;
|
|
@@ -512,28 +547,35 @@ int main (int argc, char *argv[])
|
|
/* Import TGA logo */
|
|
/* Import TGA logo */
|
|
|
|
|
|
printf ("L");
|
|
printf ("L");
|
|
- if (image_load_tga (&rgb_logo, inputfile) < 0) {
|
|
|
|
|
|
+ if (image_load_tga(&rgb888_logo, inputfile) < 0) {
|
|
printf ("input file not found!\n");
|
|
printf ("input file not found!\n");
|
|
exit (1);
|
|
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");
|
|
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 */
|
|
/* Free original image and copy */
|
|
|
|
|
|
- image_free (&rgb_logo);
|
|
|
|
- if (!use_rgb)
|
|
|
|
- image_free (&yuyv_logo);
|
|
|
|
|
|
+ image_free(&rgb888_logo);
|
|
|
|
|
|
printf ("\n");
|
|
printf ("\n");
|
|
|
|
|