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 +}