Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Gui pisan u c
#26
Gen_icons_header.c

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
Reply


Messages In This Thread
Gui pisan u c - by savan - 07-19-2022, 10:25 AM
RE: Gui pisan u c - by savan - 07-19-2022, 10:32 AM
RE: Gui pisan u c - by savan - 07-19-2022, 10:58 AM
RE: Gui pisan u c - by savan - 07-19-2022, 12:21 PM
RE: Gui pisan u c - by mikikg - 07-19-2022, 09:44 PM
RE: Gui pisan u c - by mikikg - 07-19-2022, 10:40 PM
RE: Gui pisan u c - by savan - 07-20-2022, 10:43 AM
RE: Gui pisan u c - by mikikg - 07-20-2022, 01:42 PM
RE: Gui pisan u c - by savan - 07-20-2022, 02:59 PM
RE: Gui pisan u c - by gorankg - 07-20-2022, 08:52 PM
RE: Gui pisan u c - by savan - 07-20-2022, 09:45 PM
RE: Gui pisan u c - by mikikg - 07-20-2022, 10:23 PM
RE: Gui pisan u c - by savan - 07-21-2022, 08:11 AM
RE: Gui pisan u c - by mikikg - 07-21-2022, 10:20 AM
RE: Gui pisan u c - by savan - 07-22-2022, 06:50 PM
RE: Gui pisan u c - by mikikg - 07-22-2022, 07:36 PM
RE: Gui pisan u c - by savan - 07-22-2022, 07:55 PM
RE: Gui pisan u c - by mikikg - 07-22-2022, 07:56 PM
RE: Gui pisan u c - by savan - 07-23-2022, 07:45 AM
RE: Gui pisan u c - by savan - 07-23-2022, 02:08 PM
RE: Gui pisan u c - by mikikg - 07-23-2022, 07:41 PM
RE: Gui pisan u c - by mikikg - 07-23-2022, 08:03 PM
RE: Gui pisan u c - by mikikg - 07-23-2022, 08:44 PM
RE: Gui pisan u c - by savan - 07-24-2022, 09:19 AM
RE: Gui pisan u c - by savan - 07-24-2022, 09:45 AM
RE: Gui pisan u c - by savan - 07-24-2022, 10:07 AM
RE: Gui pisan u c - by mikikg - 07-24-2022, 11:35 AM
RE: Gui pisan u c - by savan - 07-24-2022, 12:48 PM
RE: Gui pisan u c - by savan - 07-24-2022, 01:01 PM
RE: Gui pisan u c - by mikikg - 07-24-2022, 01:04 PM
RE: Gui pisan u c - by savan - 07-24-2022, 03:48 PM
RE: Gui pisan u c - by mikikg - 07-24-2022, 06:10 PM
RE: Gui pisan u c - by savan - 07-24-2022, 08:35 PM
RE: Gui pisan u c - by savan - 07-25-2022, 04:31 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)