int main(int argc, char *argv[]) { char ifname[FNAMELEN+1]; int haveifname = 0; char ofname[FNAMELEN+1]; int haveofname = 0; float wdelta[] = {1.,1.,1.}; int stride[] = {1,1,1}; if (argc < 5) { usage(argv[0]); return -1; } int ic = 1; while (ic < argc) { if (!strcmp(argv[ic], "-f")) { strncpy(ifname, argv[++ic], FNAMELEN); haveifname = 1; } else if (!strcmp(argv[ic], "-o")) { strncpy(ofname, argv[++ic], FNAMELEN); haveofname = 1; } else if (!strcmp(argv[ic], "-s")) { stride[0] = atoi(argv[++ic]); stride[1] = atoi(argv[++ic]); stride[2] = atoi(argv[++ic]); if (stride[0] < 1 || stride[1] < 1 || stride[2] < 1) { fprintf(stderr, "stride must be at least 1 in each direction!\n"); exit(-1); } } else if (!strcmp(argv[ic], "-w")) { wdelta[0] = atof(argv[++ic]); wdelta[1] = atof(argv[++ic]); wdelta[2] = atof(argv[++ic]); } ic++; } if (!haveifname || !haveofname) { usage(argv[0]); } // find start/end of filename indices fprintf(stderr, "Finding start/end indices for stack: check inputs if this hangs!\n"); int istart=0, iend; char tfname[FNAMELEN+1]; sprintf(tfname, ifname, istart); FILE *tf = fopen(tfname, "r"); while (!tf) { //fclose(tf); istart++; sprintf(tfname, ifname, istart); //fprintf(stderr, "istart = %d\n", istart); //fprintf(stderr, "tfname = %s\n", tfname); tf = fopen(tfname, "r"); } fclose(tf); iend = istart + 1; sprintf(tfname, ifname, iend); tf = fopen(tfname, "r"); while (tf) { fclose(tf); iend++; sprintf(tfname, ifname, iend); //fprintf(stderr, "iend = %d\n", iend); //fprintf(stderr, "tfname = %s\n", tfname); tf = fopen(tfname, "r"); } iend--; fprintf(stderr, "File index appears to go from %d to %d\n", istart, iend); VOL_STRUCT *tgavol = loadTGAstack(ifname, istart, iend, 1); tgavol->wdx = wdelta[0]; tgavol->wdy = wdelta[1]; tgavol->wdz = wdelta[2]; showXvol(tgavol); VOL_STRUCT *tgavol_sm = rebinXvol(tgavol, stride); normaliseXvol(tgavol_sm); showXvol(tgavol_sm); XRAW_STRUCT *xraw = Xvol2Xraw(tgavol_sm); sprintf(xraw->filename, ofname); showXraw(xraw); saveXraw(xraw); return 0; }
int main(int argc, char *argv[]) { #define FNAMELEN 400 char ifname[FNAMELEN+1]; int haveifname = 0; char ofname[FNAMELEN+1]; int haveofname = 0; int trim[3] = {0,0,0}; int stride[3] = {1,1,1}; //{3,3,1}; int pow2 = 0; int max1g = 0; if (argc < 5) { usage(argv[0]); return -1; } int ic = 1; while (ic < argc) { if (!strcmp(argv[ic], "-f")) { strncpy(ifname, argv[++ic], FNAMELEN); haveifname = 1; } else if (!strcmp(argv[ic], "-o")) { strncpy(ofname, argv[++ic], FNAMELEN); haveofname = 1; } else if (!strcmp(argv[ic], "-t")) { trim[0] = atoi(argv[++ic]); trim[1] = atoi(argv[++ic]); trim[2] = atoi(argv[++ic]); if (trim[0] < 0 || trim[1] < 1 || trim[2] < 1) { fprintf(stderr, "trim must be at least 0 in each direction!\n"); exit(-1); } } else if (!strcmp(argv[ic], "-s")) { stride[0] = atoi(argv[++ic]); stride[1] = atoi(argv[++ic]); stride[2] = atoi(argv[++ic]); if (stride[0] < 1 || stride[1] < 1 || stride[2] < 1) { fprintf(stderr, "stride must be at least 1 in each direction!\n"); exit(-1); } } else if (!strcmp(argv[ic], "-2")) { pow2 = 1; } else if (!strcmp(argv[ic], "-1G")) { max1g = 1; } ic++; } if (!haveifname || !haveofname) { usage(argv[0]); return -1; } XRAW_STRUCT *xr = loadXraw(ifname); if (!xr) { fprintf(stderr, "Failed to open or read '%s'.\n", argv[1]); return -1; } showXraw(xr); fprintf(stdout, "- - - - - - - - - - - - - - - - - - - - - - - - -\n"); if (trim[0] + trim[1] + trim[2] > 1) { XRAW_STRUCT *xrt = trimXraw(xr, trim); if (xrt) { deleteXraw(xr); xr = xrt; } } if (max1g) { while (((long)xr->nx / (long)stride[0] * (long)xr->ny / (long)stride[1] * (long)xr->nz / (long)stride[2]) > (long)1024 * (long)1024 * (long)1024) { int maxidx = 0; int maxn = xr->nx; if (xr->ny/stride[1] > xr->nx/stride[0]) { maxidx = 1; maxn = xr->ny; } if (xr->nz/stride[2] > maxn/stride[maxidx]) { maxidx = 2; } stride[maxidx] += 1; } } fprintf(stderr, "converting...\n"); VOL_STRUCT *vol = Xraw2Xvol(xr, stride); if (!vol) { fprintf(stderr, "Failed to parse data volume.\n"); return -1; } showXvol(vol); if (pow2) { fprintf(stderr, "converting to pow2-format...\n"); VOL_STRUCT *vol2 = makePow2Xvol(vol); vol = vol2; } fprintf(stderr, "converting...\n"); XRAW_STRUCT *xro = Xvol2Xraw(vol); sprintf(xro->filename, ofname); showXraw(xro); fprintf(stderr, "writing...\n"); saveXraw(xro); return 0; }
int main(int argc, char *argv[]) { char ofname[FNAMELEN+1]; int haveofname = 0; int dims[] = {0, 0, 0}; int havedims = 0; float vals[] = {0., 1.}; int width = 1; float wdelta[] = {1.,1.,1.}; if (argc < 7) { usage(argv[0]); return -1; } int ic = 1; while (ic < argc) { if (!strcmp(argv[ic], "-o")) { strncpy(ofname, argv[++ic], FNAMELEN); haveofname = 1; } else if (!strcmp(argv[ic], "-d")) { dims[0] = atoi(argv[++ic]); dims[1] = atoi(argv[++ic]); dims[2] = atoi(argv[++ic]); if (dims[0] < 1 || dims[1] < 1 || dims[2] < 1) { fprintf(stderr, "dimensions too small, please >= 1 in every direction!\n"); exit(-1); } havedims = 1; } else if (!strcmp(argv[ic], "-v")) { vals[0] = atoi(argv[++ic]); vals[1] = atoi(argv[++ic]); } else if (!strcmp(argv[ic], "-p")) { width = atoi(argv[++ic]); } else if (!strcmp(argv[ic], "-w")) { wdelta[0] = atof(argv[++ic]); wdelta[1] = atof(argv[++ic]); wdelta[2] = atof(argv[++ic]); } ic++; } if (!haveofname || !havedims) { usage(argv[0]); } VOL_STRUCT *vol = (VOL_STRUCT *)malloc(1 * sizeof(VOL_STRUCT)); sprintf(vol->filename, "generated_3d_checkerboard"); vol->nx = dims[0]; vol->ny = dims[1]; vol->nz = dims[2]; vol->wdx = wdelta[0]; vol->wdy = wdelta[1]; vol->wdz = wdelta[2]; vol->bzero = 0.0; vol->bscale = 1.0; int i, j, k; vol->data = (float ***)malloc(vol->nx * sizeof(float **)); for (i = 0; i < vol->nx; i++) { vol->data[i] = (float **)malloc(vol->ny * sizeof(float *)); for (j = 0; j < vol->ny; j++) { vol->data[i][j] = (float *)malloc(vol->nz * sizeof(float)); for (k = 0; k < vol->nz; k++) { if (((i + j + k) / width) % 2) { vol->data[i][j][k] = vals[0]; } else { vol->data[i][j][k] = vals[1]; } } } } int npins = 8; float pinpoints[] = {0.0, 29.0, 32.0, 36.0, 127.0, 127.5, 191.25, 255.0}; COLOUR table[] = {{0.69, 0.68, 0.67}, {0.09, 0.10, 0.23}, {0.03, 0.09, 0.18}, {0.03, 0.09, 0.12}, {0.00, 0.06, 0.01}, {0.00, 0.05, 0.00}, {1.00, 0.03, 0.00}, {1.00, 0.00, 0.00}}; //float alphas[] = {0.5, 0.391, 0.380, 0.365, 0.024, 0.025, 0.263, 0.5}; int pinidx = 0; // index of pin on right of i for (i = 0; i < 256; i++) { while ((float)i <= pinpoints[pinidx] && pinidx < npins-1) { pinidx++; } if ((pinidx > npins-1) || (pinidx < 1)) { fprintf(stderr, "Error finding pin for colortable!\n"); exit(-1); } float frac = ((float)i - pinpoints[pinidx-1]) / (pinpoints[pinidx] - pinpoints[pinidx-1]); vol->red[i] = table[pinidx-1].r * (1. - frac) + table[pinidx].r * frac; vol->green[i] = table[pinidx-1].g * (1. - frac) + table[pinidx].g * frac; vol->blue[i] = table[pinidx-1].b * (1. - frac) + table[pinidx].b * frac; } showXvol(vol); VOL_STRUCT *vol_sm = vol; //rebinXvol(vol, stride); normaliseXvol(vol_sm); showXvol(vol_sm); XRAW_STRUCT *xraw = Xvol2Xraw(vol_sm); sprintf(xraw->filename, ofname); showXraw(xraw); saveXraw(xraw); return 0; }