Gen_icons_header.c
Ovo sam napravio da mi sve slike iz foldera icons generise u header fajl koji kompilujem preko make. Onda slike smestim u memoriju sa loadPng2 funkcijom. Kasnije razmisljam da implementiram jednu funkciju za libgd koji ce da generise sprite.png sliku kao sto je u onom primeru iz raspidmx/game , u libgd mogu da rotiram png sliku u nekoliko uglova potrebnih za taj sprite.png pa za raspidmx rotaciju... itd, imam dosta ideja koje cu da sprovedem u delo. Ima tu jos dosta stvari da se modifikuje u raspidmx za neke finije stvari al otom potom doce i to na red
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
#include <dirent.h>
void strip_ext(char *fname)
{
char *end = fname + strlen(fname);
while (end > fname && *end != '.' && *end != '\\' && *end != '/')
{
--end;
}
if ((end > fname && *end == '.') && (*(end - 1) != '\\' && *(end - 1) != '/'))
{
*end = '\0';
}
}
void usage(char *arg)
{
printf("Usage: %s append|new\n", arg);
}
int main(int argc, char *argv[])
{
DIR *dir = NULL;
struct dirent *ep = NULL;
char *extension = NULL;
char *fname = NULL;
char *buf = NULL;
char *ident = NULL;
uint32_t i=0, file_size=0, need_comma=0;
FILE *f_input = NULL;
FILE *f_output = NULL;
if (argc != 2)
{
usage(argv[0]);
return 0;
}
if ((dir = opendir("icons")) != NULL)
{
while ((ep = readdir(dir)) != NULL)
{
/*if (ep->d_type == DT_REG)*/
{
if (strcmp(ep->d_name, ".") != 0 && strcmp(ep->d_name, "..") != 0)
{
if ((extension = strrchr(ep->d_name, '.')) != NULL)
{
if (strcmp(extension, ".png") == 0)
{
char *filename = NULL;
size_t filename_sz = strlen(ep->d_name) + 6 + 1;
if ((filename = (char *)malloc(filename_sz)) == NULL)
{
fprintf(stderr, "%s: can't malloc %d bytes!\n", argv[0], filename_sz);
return -1;
}
snprintf(filename, filename_sz, "icons/%s", ep->d_name);
if ((f_input = fopen(filename, "rb")) == NULL)
{
fprintf(stderr, "%s: can't open %s for reading!\n", argv[0], filename);
free(filename);
return -1;
}
free(filename);
fseek(f_input, 0, SEEK_END);
file_size = ftell(f_input);
fseek(f_input, 0, SEEK_SET);
if ((buf = (char *)malloc(file_size)) == NULL)
{
fprintf(stderr, "%s: can't malloc %d bytes!\n", argv[0], file_size);
return -1;
}
fread(buf, file_size, 1, f_input);
fclose(f_input);
if (memcmp(argv[1], "append", 6) == 0)
{
printf("Appending icons to the saviola_icons.h header file.\n");
if ((f_output = fopen("include/saviola_icons.h", "a")) == NULL)
{
fprintf(stderr, "%s: can't open include/saviola_icons.h for writing\n", argv[0]);
free(buf);
return -1;
}
}
else if (memcmp(argv[1], "new", 2) == 0)
{
printf("Cleaning saviola_icons.h header file and generating saviola_icons.h header file.\n");
if ((f_output = fopen("include/saviola_icons.h", "w")) == NULL)
{
fprintf(stderr, "%s: can't open include/saviola_icons.h for writing\n", argv[0]);
free(buf);
return -1;
}
}
else
{
usage(argv[0]);
free(buf);
return 0;
}
printf("Processing: %s\n\n", ep->d_name);
fname = ep->d_name;
strip_ext(fname);
ident = fname;
need_comma = 0;
fprintf(f_output, "size_t %s_size = %u;\n\n", ident, file_size);
fprintf(f_output, "char %s[%u] = {", ident, file_size);
for (i = 0; i < file_size; ++i)
{
if (need_comma)
fprintf(f_output, ", ");
else
need_comma = 1;
if ((i % 11) == 0)
fprintf(f_output, "\n\t");
fprintf(f_output, "0x%.2x", buf[i] & 0xff);
}
fprintf(f_output, "\n};\n\n");
fclose(f_output);
free(buf);
}
}
}
}
}
}
closedir(dir);
return 0;
}
Ovo sam napravio da mi sve slike iz foldera icons generise u header fajl koji kompilujem preko make. Onda slike smestim u memoriju sa loadPng2 funkcijom. Kasnije razmisljam da implementiram jednu funkciju za libgd koji ce da generise sprite.png sliku kao sto je u onom primeru iz raspidmx/game , u libgd mogu da rotiram png sliku u nekoliko uglova potrebnih za taj sprite.png pa za raspidmx rotaciju... itd, imam dosta ideja koje cu da sprovedem u delo. Ima tu jos dosta stvari da se modifikuje u raspidmx za neke finije stvari al otom potom doce i to na red