#include #include 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; }