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 @@ | @@ -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 @@ | @@ -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 | +} |