summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Tools/bmpraw/src/main.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/Tools/bmpraw/src/main.c b/Tools/bmpraw/src/main.c
new file mode 100644
index 0000000..17a6da7
--- /dev/null
+++ b/Tools/bmpraw/src/main.c
@@ -0,0 +1,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;
+}