img2gba

diff 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
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/imgconv.c	Wed Jun 25 18:19:52 2014 +0300
     1.3 @@ -0,0 +1,78 @@
     1.4 +#include <stdio.h>
     1.5 +#include <stdlib.h>
     1.6 +#include <string.h>
     1.7 +#include <imago2.h>
     1.8 +
     1.9 +int save_image15(unsigned int *img, int x, int y, const char *fname, const char *array_name);
    1.10 +
    1.11 +int main(int argc, char **argv)
    1.12 +{
    1.13 +	int i;
    1.14 +
    1.15 +	if(argc < 2) {
    1.16 +		fprintf(stderr, "not enough arguments\n");
    1.17 +		return -1;
    1.18 +	}
    1.19 +
    1.20 +	for(i=1; i<argc; i++) {
    1.21 +		char fname[512], *cptr;
    1.22 +		int x, y;
    1.23 +		unsigned int *img = img_load_pixels(argv[i], &x, &y, IMG_FMT_RGBA32);
    1.24 +		if(!img) continue;
    1.25 +
    1.26 +		strcpy(fname, argv[i]);
    1.27 +		cptr = strrchr(fname, '.');
    1.28 +		if(cptr) {
    1.29 +			strcpy(cptr, ".c");
    1.30 +		} else {
    1.31 +			cptr = fname + strlen(fname);
    1.32 +			strcpy(cptr, ".c");
    1.33 +		}
    1.34 +
    1.35 +		if(save_image15(img, x, y, fname, "img") == -1) {
    1.36 +			fprintf(stderr, "could not save as %s\n", fname);
    1.37 +		}
    1.38 +
    1.39 +		img_free_pixels(img);
    1.40 +	}
    1.41 +	return 0;
    1.42 +}
    1.43 +
    1.44 +#define GET_R(pixel)	(((pixel) >> 16) & 0xff)
    1.45 +#define GET_G(pixel)	(((pixel) >> 8) & 0xff)
    1.46 +#define GET_B(pixel)	(((pixel) >> 0) & 0xff)
    1.47 +
    1.48 +#define PACK_COLOR15(r, g, b) ((((r) & 0x1f) << 10) | (((g) & 0x1f) << 5) | ((b) & 0x1f))
    1.49 +
    1.50 +int save_image15(unsigned int *img, int x, int y, const char *fname, const char *array_name)
    1.51 +{
    1.52 +	int i, j;
    1.53 +	FILE *fp;
    1.54 +
    1.55 +	if(!(fp = fopen(fname, "w"))) {
    1.56 +		return -1;
    1.57 +	}
    1.58 +
    1.59 +	fprintf(fp, "\nconst unsigned short %s[] = {\n", array_name);
    1.60 +
    1.61 +	for(j=0; j<y; j++) {
    1.62 +		fprintf(fp, "\t");
    1.63 +		for(i=0; i<x; i++) {
    1.64 +			unsigned short r = GET_R(*img) >> 3;
    1.65 +			unsigned short g = GET_G(*img) >> 3;
    1.66 +			unsigned short b = GET_B(*img) >> 3;
    1.67 +			unsigned short pixel15 = PACK_COLOR15(r, g, b);
    1.68 +			fprintf(fp, "%u", pixel15);
    1.69 +			if(i < x-1 || j < y-1) {
    1.70 +				fprintf(fp, ", ");
    1.71 +			}
    1.72 +			img++;
    1.73 +		}
    1.74 +		fprintf(fp, "\n");
    1.75 +	}
    1.76 +
    1.77 +	fprintf(fp, "};\n");
    1.78 +
    1.79 +	fclose(fp);
    1.80 +	return 0;
    1.81 +}