summaryrefslogtreecommitdiffstats
path: root/Tools/bmpraw/src/main.c
blob: 17a6da79f2e5269bd7a6271946b943dbed1ffaac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
        int retval;
        FILE *fbmp, *fraw;
        unsigned char mrgb[3], mask, *bitmap;
        int row, col, x, y, offset;      
        
        retval = 0;

        if (4 != argc) {
        	fprintf(stderr, "bmpraw (C) 2004 by oliver\n");
        	fprintf(stderr, "Usage: %s {24|8} in.bmp out.raw\n", argv[0]);
       	} else {
        	if (NULL == (fbmp = fopen(argv[2], "rb"))) {
        		perror("fopen(IMAGE_FILE)");
        		retval = 1;
       		} else if (NULL == (fraw = fopen(argv[3], "wb"))) {
       		        perror("fopen(OUT_FILE)");
        		retval = 1;
       		} else {
	         	fseek(fbmp, 10L, SEEK_SET);
         	        fread(mrgb, 1, 4, fbmp);
         	        offset = mrgb[3];
         	        offset <<= 8;
         	        offset += mrgb[2];
         	        offset <<= 8;
         	        offset += mrgb[1];
         	        offset <<= 8;
         	        offset += mrgb[0];
         	        fseek(fbmp, 18L, SEEK_SET);
         	        fread(mrgb, 1, 4, fbmp);
                        x = mrgb[3];
         	        x <<= 8;
         	        x += mrgb[2];
         	        x <<= 8;
         	        x += mrgb[1];
         	        x <<= 8;
         	        x += mrgb[0];
         	        fseek(fbmp, 22L, SEEK_SET);
         	        fread(mrgb, 1, 4, fbmp);
         	        y = mrgb[3];
         	        y <<= 8;
         	        y += mrgb[2];
         	        y <<= 8;
         	        y += mrgb[1];
         	        y <<= 8;
         	        y += mrgb[0];
               	        fseek(fbmp, offset, SEEK_SET);      
         	        printf("Image Resolution: %dx%d\n", x, y);

               	        bitmap = malloc(4 * (x * y));
               	        for (row = y; row; row--) {
               		        for (col = 0; col != x; col++) {
               		                if (24 == atoi(argv[1])) {
	               		                fread(&mrgb, sizeof(char), 3, fbmp);
                       		                bitmap[(((row *x) +col) *3) +0] = mrgb[2];
                       		                bitmap[(((row *x) +col) *3) +1] = mrgb[1];
                       		                bitmap[(((row *x) +col) *3) +2] = mrgb[0];
                       		        } else if (8 == atoi(argv[1])) {
                       		                fread(&mrgb, sizeof(char), 1, fbmp);
                       		                bitmap[((row *x) +col)] = mrgb[0];
                       		        }        
               		        }
              		}
              		
       		        fwrite(bitmap, (24 == atoi(argv[1])) ? 3 : 1, (long)(x * y), fraw);
       		        fprintf(stdout, "Converting to raw\n");
       		        free(bitmap);
       		        fclose(fbmp);
                        fclose(fraw);     	
       		}        
       	}    
        	
	return retval;
}