#include #include void main() { //FILE *master = fopen("master.bmp", "rb"); FILE *master = fopen("master.raw", "rb"); FILE *maska = fopen("mask-blue-inverted.bmp", "rb"); FILE *maskb = fopen("mask-green1-inverted.bmp", "rb"); FILE *maskc = fopen("mask-green2-inverted.bmp", "rb"); FILE *out = fopen("merged.raw", "wb"); int masterbyte=0, maskbytea=0, maskbyteb=0, maskbytec=0; unsigned char outbyte=0; //fseek(master, 1146, SEEK_SET); fseek(maska, 1146, SEEK_SET); fseek(maskb, 1146, SEEK_SET); fseek(maskc, 1146, SEEK_SET); // 0x01 = 00000001 // 0x02 = 00000010 // 0x03 = 00000011 // 0xFC = 11111100 // 0xFD = 11111101 // 0xFE = 11111110 while ((masterbyte = getc(master)) != EOF) { maskbytea = fgetc(maska); maskbyteb = fgetc(maskb); maskbytec = fgetc(maskc); // DEBUG //printf("Reading byte %lu", ftell(master)); //maskbyte = fgetc(mask); outbyte = (unsigned char)masterbyte; // DEBUG //printf(" Value: %u", outbyte); outbyte = outbyte & 0xFC; if (maskbytea != 0) { outbyte = outbyte | 1; } else if (maskbyteb != 0) { outbyte = outbyte | 2; } else if (maskbytec != 0) { outbyte = outbyte | 3; } // DEBUG //printf(" Output: %u\n", outbyte); fprintf(out, "%c", outbyte); } fclose(master); fclose(maska); fclose(maskb); fclose(maskc); fclose(out); }