#include "zlib.h" #include #include int main(int argc, char *argv[]) { FILE *fp = fopen(argv[1], "rb"); if (argc != 2 || fp==0) { fprintf(stderr, "%s [filename]\n", argv[0]); return -1; // ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù. } // ÆÄÀÏ »çÀÌÁ ±¸ÇÑ´Ù. fseek (fp , 0 , SEEK_END); long lSize = ftell (fp); rewind (fp); // ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ¿© Åë°·Î º¹»çÇÑ´Ù. unsigned char *raw = (unsigned char*)malloc(lSize); fread (raw, 1, lSize, fp); fclose(fp); // ¾ÐÃàµÇÁö ¾ÊÀº Ç¥ÁØ Æ÷¸ËÀ¸·Î º¯È¯ÇÑ´Ù. unsigned int nWidth = raw[18] + raw[19]*256; unsigned int nHeight = raw[22] + raw[23]*256; unsigned int nBuffWidth = ((nWidth+3)/4)*4; // BMP ÆÄÀÏÀº 4¹ÙÀÌÆ® ´ÜÀ§·Î ÁÙ Á¤·ÄµÇ¾î ÀÖ´Ù. int nMode = 0; int nBuffSize = nWidth*nHeight+5; unsigned char *buff = (unsigned char*)malloc(nBuffSize); buff[0] = nMode; buff[1] = raw[19]; buff[2] = raw[18]; buff[3] = raw[23]; buff[4] = raw[22]; unsigned char* tmp = &buff[5]; int x = 0, y = 0; for (y = nHeight-1; y >= 0; y--) { int nPos = raw[10] + raw[11]*256 + y*nBuffWidth; // µ¥ÀÌÅÍ ½ÃÀÛ À§Ä¡ for (x = 0; x < nWidth; x++) { *tmp = raw[nPos]; tmp++; nPos++; } } free(raw); // ¾ÐÃàÀ» ÇØº»´Ù. if (nBuffSize > 20*100000) { // ¾ÐÃà ¹öÆÛ Áغñ long compressed_Size = nBuffSize*3; raw = (unsigned char*)malloc(compressed_Size); if (compress(raw, &compressed_Size, &buff[5], nWidth*nHeight) == 0) // ¾ÐÃ༺°ø { if (compressed_Size < nBuffSize-8) { nBuffSize = compressed_Size + 8; buff[0] = nMode = 1; buff[5] = compressed_Size / (256*256); // 0xFFFFFF ±îÁö¸¦ ¾ÐÃàµÈ À̹ÌÁöÀÇ ÃÖ´ëÅ©±â·Î ÇÑ´Ù. buff[6] = compressed_Size / (256); buff[7] = compressed_Size % (256); memcpy(&buff[8], raw, compressed_Size); } } free(raw); } // ¹è¿­ À̸§À» °áÁ¤ÇÑ´Ù. int nNameStart = 0; int i = 0; int nStrLen = (int)strlen(argv[1]); for (i = 0 ; i < nStrLen; i++) { if (argv[1][i] == '/') nNameStart =i+1; if (argv[1][i] == '.') argv[1][i] = 0; } printf("const unsigned char %s[%d] = {", &argv[1][nNameStart], nBuffSize); // À̹ÌÁö ¹è¿­À» Àû´Â´Ù. for (i = 0; i < nBuffSize; i++) { if (i%8 == 0) printf("\n\t"); printf("0x%02X, ",buff[i]); } printf("\n};\n"); // À̹ÌÁö ¹è¿­ ´Ý±â free(buff); return 0; }