summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2005-01-24 09:29:07 (GMT)
committerOliver Schinagl <oliver@schinagl.nl>2005-01-24 09:29:07 (GMT)
commit946db94a8829861e203833c5f50f5d1a0b20f69f (patch)
tree70d83da71e318ba0de0d5775e15c1125478ddb0a
parenta290786336b23f0e74923930f1763c37a6773f94 (diff)
downloadTASS-946db94a8829861e203833c5f50f5d1a0b20f69f.zip
TASS-946db94a8829861e203833c5f50f5d1a0b20f69f.tar.gz
TASS-946db94a8829861e203833c5f50f5d1a0b20f69f.tar.bz2
-rw-r--r--Tools/rawint/src/main.c90
1 files 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;
}