From 946db94a8829861e203833c5f50f5d1a0b20f69f Mon Sep 17 00:00:00 2001 From: Oliver Schinagl Date: Mon, 24 Jan 2005 09:29:07 +0000 Subject: --- Tools/rawint/src/main.c | 90 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 62 insertions(+), 28 deletions(-) diff --git a/Tools/rawint/src/main.c b/Tools/rawint/src/main.c index 3ad05d4..17a6da7 100644 --- a/Tools/rawint/src/main.c +++ b/Tools/rawint/src/main.c @@ -3,41 +3,75 @@ int main(int argc, char *argv[]) { int retval; - FILE *fraw, *frawmask, *frawint; - unsigned char mrgb[3]; - int totsize, x, y; + FILE *fbmp, *fraw; + unsigned char mrgb[3], mask, *bitmap; + int row, col, x, y, offset; retval = 0; - - if (argc < 4) { - fprintf(stderr, "bmpmask (C) 2004 by oliver\n"); - fprintf(stderr, "Usage: %s x-res y-res in.raw mask.raw out.int\n", - argv[0]); - } else { - x = atoi(argv[1]); - y = atoi(argv[2]); - if (NULL == (fraw = fopen(argv[3], "rb"))) { + + 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 == (frawmask = fopen(argv[4], "rb"))) { - perror("fopen(MASK_FILE)"); - retval = 1; - } else if (NULL == (frawint = fopen(argv[5], "wb"))) { + } else if (NULL == (fraw = fopen(argv[3], "wb"))) { perror("fopen(OUT_FILE)"); retval = 1; - } else { - for (totsize = 0; totsize < (x*y); totsize++) { - fread(&mrgb, 1, 1, frawmask); - fwrite(&mrgb, 1, 1, frawint); - fread(&mrgb, 1, 3, fraw); - fwrite(&mrgb, 1, 3, frawint); - } - fprintf(stdout, "Done interleaving\n"); - fclose(fraw); - fclose(frawmask); - fclose(frawint); + } 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; } -- cgit v0.12