img2gba

annotate src/imgconv.c @ 0:c359fcbd2422

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Wed, 25 Jun 2014 18:19:52 +0300
parents
children eb9334da7c80
rev   line source
nuclear@0 1 #include <stdio.h>
nuclear@0 2 #include <stdlib.h>
nuclear@0 3 #include <string.h>
nuclear@0 4 #include <imago2.h>
nuclear@0 5
nuclear@0 6 int save_image15(unsigned int *img, int x, int y, const char *fname, const char *array_name);
nuclear@0 7
nuclear@0 8 int main(int argc, char **argv)
nuclear@0 9 {
nuclear@0 10 int i;
nuclear@0 11
nuclear@0 12 if(argc < 2) {
nuclear@0 13 fprintf(stderr, "not enough arguments\n");
nuclear@0 14 return -1;
nuclear@0 15 }
nuclear@0 16
nuclear@0 17 for(i=1; i<argc; i++) {
nuclear@0 18 char fname[512], *cptr;
nuclear@0 19 int x, y;
nuclear@0 20 unsigned int *img = img_load_pixels(argv[i], &x, &y, IMG_FMT_RGBA32);
nuclear@0 21 if(!img) continue;
nuclear@0 22
nuclear@0 23 strcpy(fname, argv[i]);
nuclear@0 24 cptr = strrchr(fname, '.');
nuclear@0 25 if(cptr) {
nuclear@0 26 strcpy(cptr, ".c");
nuclear@0 27 } else {
nuclear@0 28 cptr = fname + strlen(fname);
nuclear@0 29 strcpy(cptr, ".c");
nuclear@0 30 }
nuclear@0 31
nuclear@0 32 if(save_image15(img, x, y, fname, "img") == -1) {
nuclear@0 33 fprintf(stderr, "could not save as %s\n", fname);
nuclear@0 34 }
nuclear@0 35
nuclear@0 36 img_free_pixels(img);
nuclear@0 37 }
nuclear@0 38 return 0;
nuclear@0 39 }
nuclear@0 40
nuclear@0 41 #define GET_R(pixel) (((pixel) >> 16) & 0xff)
nuclear@0 42 #define GET_G(pixel) (((pixel) >> 8) & 0xff)
nuclear@0 43 #define GET_B(pixel) (((pixel) >> 0) & 0xff)
nuclear@0 44
nuclear@0 45 #define PACK_COLOR15(r, g, b) ((((r) & 0x1f) << 10) | (((g) & 0x1f) << 5) | ((b) & 0x1f))
nuclear@0 46
nuclear@0 47 int save_image15(unsigned int *img, int x, int y, const char *fname, const char *array_name)
nuclear@0 48 {
nuclear@0 49 int i, j;
nuclear@0 50 FILE *fp;
nuclear@0 51
nuclear@0 52 if(!(fp = fopen(fname, "w"))) {
nuclear@0 53 return -1;
nuclear@0 54 }
nuclear@0 55
nuclear@0 56 fprintf(fp, "\nconst unsigned short %s[] = {\n", array_name);
nuclear@0 57
nuclear@0 58 for(j=0; j<y; j++) {
nuclear@0 59 fprintf(fp, "\t");
nuclear@0 60 for(i=0; i<x; i++) {
nuclear@0 61 unsigned short r = GET_R(*img) >> 3;
nuclear@0 62 unsigned short g = GET_G(*img) >> 3;
nuclear@0 63 unsigned short b = GET_B(*img) >> 3;
nuclear@0 64 unsigned short pixel15 = PACK_COLOR15(r, g, b);
nuclear@0 65 fprintf(fp, "%u", pixel15);
nuclear@0 66 if(i < x-1 || j < y-1) {
nuclear@0 67 fprintf(fp, ", ");
nuclear@0 68 }
nuclear@0 69 img++;
nuclear@0 70 }
nuclear@0 71 fprintf(fp, "\n");
nuclear@0 72 }
nuclear@0 73
nuclear@0 74 fprintf(fp, "};\n");
nuclear@0 75
nuclear@0 76 fclose(fp);
nuclear@0 77 return 0;
nuclear@0 78 }