// Convert BIO-RAD ISI to TIFF // 16bit grayscale little-endian // CC-BY-NC sachy@brmlab #include #include #include #define ISIWIDTH 342 #define TIFFWIDTH 310 #define TIFFHEIGHT 240 #define TIFFHEAD {0x49,0x49,0x2a,0x00,0x88,0x8a,0x04,0x00} unsigned char tt[]={0x11,0x00,0x00,0x01,0x03,0x00,0x01,0x00, 0x00,0x00,0x36,0x01,0x00,0x00,0x01,0x01,0x03,0x00,0x01,0x00,0x00,0x00,0xf0,0x00, 0x00,0x00,0x02,0x01,0x03,0x00,0x02,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x03,0x01, 0x03,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x01,0x03,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x11,0x01,0x04,0x00,0x02,0x00,0x00,0x00,0x72,0x8b, 0x04,0x00,0x12,0x01,0x03,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x15,0x01, 0x03,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x01,0x03,0x00,0x01,0x00, 0x00,0x00,0x80,0x00,0x00,0x00,0x17,0x01,0x04,0x00,0x02,0x00,0x00,0x00,0x6a,0x8b, 0x04,0x00,0x1a,0x01,0x05,0x00,0x01,0x00,0x00,0x00,0x5a,0x8b,0x04,0x00,0x1b,0x01, 0x05,0x00,0x01,0x00,0x00,0x00,0x62,0x8b,0x04,0x00,0x1c,0x01,0x03,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x01,0x02,0x00,0x02,0x00,0x00,0x00,0x2d,0x00, 0x00,0x00,0x28,0x01,0x03,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x52,0x01, 0x03,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x53,0x01,0x03,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x6c,0x02,0x00,0x80,0x1e, 0x02,0x00,0x08,0x00,0x00,0x00,0x08,0x6c,0x02,0x00}; int main(int argc,char **argv) { FILE *in=NULL; FILE *out=NULL; switch(argc) { case 2: { in=fopen(argv[1],"r"); out=stdout; break; } case 3: { in=fopen(argv[1],"r"); out=fopen(argv[2],"w"); break; } default: case 0: case 1: { printf("isi2tif infile [outfile]"); return -1; break; } } unsigned char buff[ISIWIDTH*2]; unsigned char buff2[ISIWIDTH*2*2]; unsigned char th[]=TIFFHEAD; unsigned short h=0; memset(buff,0x00,ISIWIDTH*2); fread(buff,1,38*2,in); fwrite(th,1,sizeof(th),out); while(fread(buff,2,ISIWIDTH,in)==ISIWIDTH && h++