source: svn/trunk/zas_dstar/build/bmpbin2src/bmp2src.c @ 2

Last change on this file since 2 was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
File size: 2.2 KB
RevLine 
[2]1#include "zlib.h"
2#include <stdio.h>
3#include <stdlib.h>
4
5int main(int argc, char *argv[])
6{
7        FILE *fp = fopen(argv[1], "rb");
8        if (argc != 2 || fp==0) 
9        {
10                fprintf(stderr, "%s [filename]\n", argv[0]);
11                return -1; // ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù.
12        }
13        // ÆÄÀÏ »çÀÌÁ ±¸ÇÑ´Ù.
14        fseek (fp , 0 , SEEK_END);
15        long lSize = ftell (fp);
16        rewind (fp);
17        // ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ¿© Åë°·Î º¹»çÇÑ´Ù.
18        unsigned char *raw = (unsigned char*)malloc(lSize);
19        fread (raw, 1, lSize, fp);
20        fclose(fp);
21        // ¾ÐÃàµÇÁö ¾ÊÀº Ç¥ÁØ Æ÷¸ËÀ¸·Î º¯È¯ÇÑ´Ù.
22        unsigned int nWidth = raw[18] + raw[19]*256;
23        unsigned int nHeight = raw[22] + raw[23]*256;
24        unsigned int nBuffWidth = ((nWidth+3)/4)*4; // BMP ÆÄÀÏÀº 4¹ÙÀÌÆ® ´ÜÀ§·Î ÁÙ Á¤·ÄµÇ¾î ÀÖ´Ù.
25        int nMode = 0;
26        int nBuffSize = nWidth*nHeight+5;
27        unsigned char *buff = (unsigned char*)malloc(nBuffSize);
28        buff[0] = nMode;
29        buff[1] = raw[19];
30        buff[2] = raw[18];
31        buff[3] = raw[23];
32        buff[4] = raw[22];
33        unsigned char* tmp = &buff[5];
34        int x = 0, y = 0;
35        for (y = nHeight-1; y >= 0; y--)
36        {
37                int nPos = raw[10] + raw[11]*256 + y*nBuffWidth; // µ¥ÀÌÅÍ ½ÃÀÛ À§Ä¡
38                for (x = 0; x < nWidth; x++)
39                {
40                        *tmp = raw[nPos];
41                        tmp++;
42                        nPos++;
43                }
44        }
45        free(raw);
46        // ¾ÐÃàÀ» ÇØº»´Ù.
47        if (nBuffSize > 20*100000)
48        {
49                // ¾ÐÃà ¹öÆÛ Áغñ
50                long compressed_Size = nBuffSize*3;
51                raw = (unsigned char*)malloc(compressed_Size);
52                if (compress(raw, &compressed_Size, &buff[5], nWidth*nHeight) == 0) // ¾ÐÃ༺°ø
53                {
54                        if (compressed_Size < nBuffSize-8)
55                        {
56                                nBuffSize = compressed_Size + 8;
57                                buff[0] = nMode = 1;
58                                buff[5] = compressed_Size / (256*256); // 0xFFFFFF ±îÁö¸¦ ¾ÐÃàµÈ À̹ÌÁöÀÇ ÃÖ´ëÅ©±â·Î ÇÑ´Ù.
59                                buff[6] = compressed_Size / (256);
60                                buff[7] = compressed_Size % (256);
61                                memcpy(&buff[8], raw, compressed_Size);
62                        }
63                }
64                free(raw);
65        }
66       
67        // ¹è¿­ À̸§À» °áÁ¤ÇÑ´Ù.
68        int nNameStart = 0;
69        int i = 0;
70        int nStrLen = (int)strlen(argv[1]);
71        for (i = 0 ; i < nStrLen; i++)
72        {
73                if (argv[1][i] == '/') nNameStart =i+1;
74                if (argv[1][i] == '.') argv[1][i] = 0;
75        }
76        printf("const unsigned char %s[%d] = {", &argv[1][nNameStart], nBuffSize);
77        // À̹ÌÁö ¹è¿­À» Àû´Â´Ù.
78        for (i = 0; i < nBuffSize; i++)
79        {
80                if (i%8 == 0) printf("\n\t");
81                printf("0x%02X, ",buff[i]);
82        }
83        printf("\n};\n");
84        // À̹ÌÁö ¹è¿­ ´Ý±â
85        free(buff);
86  return 0;
87}
Note: See TracBrowser for help on using the repository browser.