#include #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" #define NUM_DOMINO_X 6 #define NUM_DOMINO_Y 6 #define DOMINO_WIDTH 23 #define DOMINO_HEIGHT 12 #define EYE_SIZE 12 #define MARGIN_X 9 #define MARGIN_Y 4 #define START_X 1 + 2*(DOMINO_WIDTH + MARGIN_X) #define START_Y 2 void print_domino(unsigned char *data, int width, int n, int posx, int posy) { printf(" {.width = %d, .height = %d, .bufsize = %d, .color = (struct color[%d]) {", DOMINO_WIDTH, DOMINO_HEIGHT, DOMINO_WIDTH * DOMINO_HEIGHT, DOMINO_WIDTH * DOMINO_HEIGHT ); for (int y = 0; y < DOMINO_HEIGHT; y++) { for (int x = 0; x < DOMINO_WIDTH; x++) { printf("{"); for (int i = 0; i < n; i++) { printf("%3d, ", data[(y + posy) * width * n + (x + posx) * n + i]); } printf("},"); } } printf("}},\n"); } int main(int argc, char **argv) { int x,y,n; if (argc != 3) return 1; unsigned char *data = stbi_load(argv[1], &x, &y, &n, 0); // n = n < 3 ? n : 3; printf("#include \"../game.h\"\n"); printf("#define NUM_DOMINO_X %d\n", NUM_DOMINO_X ); printf("#define NUM_DOMINO_Y %d\n", NUM_DOMINO_Y ); printf("#define DOMINO_WIDTH %d\n", DOMINO_WIDTH ); printf("#define DOMINO_HEIGHT %d\n", DOMINO_HEIGHT); printf("#define EYE_SIZE %d\n", EYE_SIZE); printf("#define BYTES_PER_PIXEL %d\n", n); printf("struct image %s[%d][%d] = {\n", argv[2], NUM_DOMINO_X, NUM_DOMINO_Y ); for (int domino_x = 0; domino_x < NUM_DOMINO_X; domino_x++) { printf(" {\n"); for (int domino_y = 0; domino_y < NUM_DOMINO_Y; domino_y++) { print_domino( data, x, n, START_X + domino_x * (DOMINO_WIDTH + MARGIN_X), START_Y + domino_y * (DOMINO_HEIGHT + MARGIN_Y) ); } printf(" },\n"); } printf("};\n"); return 0; }