Commit 79f8b8001554f8597265fcf3d4de6c73d0cf2018
0 parents
Initial verson
Showing
4 changed files
with
106 additions
and
0 deletions
Show diff stats
1 | +++ a/Makefile | |
... | ... | @@ -0,0 +1,19 @@ |
1 | +CC=gcc | |
2 | +CC_FLAGS=-c -Wall -Werror -std=gnu99 -g | |
3 | +CC_LIBS= | |
4 | +INCLUDES= | |
5 | + | |
6 | +SOURCES=main.c | |
7 | +OBJECTS=$(SOURCES:.c=.o) | |
8 | +OUTPUT=bmp2map | |
9 | + | |
10 | +all: $(SOURCES) $(OUTPUT) | |
11 | + | |
12 | +$(OUTPUT): $(OBJECTS) | |
13 | + $(CC) $(OBJECTS) $(CC_LIBS) -o $@ | |
14 | + | |
15 | +%.o: %.c | |
16 | + $(CC) $(INCLUDES) $(CC_FLAGS) $< -o $@ | |
17 | + | |
18 | +clear: | |
19 | + rm -f $(OUTPUT) $(OBJECTS) | ... | ... |
1 | +++ a/main.c | |
... | ... | @@ -0,0 +1,85 @@ |
1 | +#include <stdio.h> | |
2 | +#include <stdlib.h> | |
3 | + | |
4 | +int main(int argc, char *argv[]) | |
5 | +{ | |
6 | + if(argc != 3) | |
7 | + { | |
8 | + printf("bmp2map [BMP_SRC] [MAP_DEST]\n"); | |
9 | + return 1; | |
10 | + } | |
11 | + | |
12 | + FILE* src = NULL; | |
13 | + FILE* dst = NULL; | |
14 | + unsigned char buffer[5]; | |
15 | + int initOffsetBMP; | |
16 | + | |
17 | + src = fopen(argv[1], "r"); | |
18 | + dst = fopen(argv[2], "w"); | |
19 | + | |
20 | + if(src == NULL) | |
21 | + { | |
22 | + printf("Unable to open the BMP file\n"); | |
23 | + return 2; | |
24 | + } | |
25 | + | |
26 | + if(dst == NULL) | |
27 | + { | |
28 | + printf("Unable to open the MAP file\n"); | |
29 | + return 3; | |
30 | + } | |
31 | + | |
32 | + //printf("Reading BMP\n"); | |
33 | + | |
34 | + fseek(src, 0x0A, SEEK_SET); | |
35 | + buffer[0] = getc(src); | |
36 | + buffer[1] = getc(src); | |
37 | + buffer[2] = getc(src); | |
38 | + buffer[3] = getc(src); | |
39 | + //printf("Pixel array offset %02x %02x %02x %02x\n", buffer[3], buffer[2], buffer[1], buffer[0]); | |
40 | + initOffsetBMP = buffer[0] + ((int)buffer[1] * 256); | |
41 | + | |
42 | + fseek(src, 0x12, SEEK_SET); | |
43 | + buffer[0] = getc(src); | |
44 | + buffer[1] = getc(src); | |
45 | + buffer[2] = getc(src); | |
46 | + buffer[3] = getc(src); | |
47 | + //printf("Width %02x %02x %02x %02x\n", buffer[3], buffer[2], buffer[1], buffer[0]); | |
48 | + | |
49 | + //fseek(src, 0x12, SEEK_SET); | |
50 | + buffer[0] = getc(src); | |
51 | + buffer[1] = getc(src); | |
52 | + buffer[2] = getc(src); | |
53 | + buffer[3] = getc(src); | |
54 | + //printf("Height %02x %02x %02x %02x\n", buffer[3], buffer[2], buffer[1], buffer[0]); | |
55 | + | |
56 | + fseek(src, 0x1C, SEEK_SET); | |
57 | + buffer[0] = getc(src); | |
58 | + buffer[1] = getc(src); | |
59 | + //printf("Bits Per Pixel %02x %02x\n", buffer[0], buffer[1]); | |
60 | + | |
61 | + if(buffer[1] != 0 || buffer[0] != 0x08) | |
62 | + { | |
63 | + printf("Could not read BMP as it's in %d bits per pixel\n", buffer[0]); | |
64 | + return 1; | |
65 | + } | |
66 | + | |
67 | + fseek(src, initOffsetBMP, SEEK_SET); | |
68 | + | |
69 | + //printf("Now reading BMP pixels and printing them to the MAP file\n"); | |
70 | + while(1) | |
71 | + { | |
72 | + buffer[0] = getc(src); | |
73 | + if(feof(src)) | |
74 | + break; | |
75 | + //printf("Pixel BMP 24 bits Grey %02X\n", buffer[0]); | |
76 | + fprintf(dst, "%c", buffer[0]); | |
77 | + } | |
78 | + | |
79 | + //printf("Done !\n"); | |
80 | + | |
81 | + fclose(src); | |
82 | + fclose(dst); | |
83 | + | |
84 | + return 0; | |
85 | +} | ... | ... |