int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "Usage: %s xrwfilename\n", argv[0]); return -1; } XRAW_STRUCT *xr = loadXraw(argv[1]); if (!xr) { fprintf(stderr, "Failed to open or read '%s'.\n", argv[1]); return -1; } int nbin = 256; float x[256]; float data[256]; int centre = 1; int i; for (i = 0; i < 256; i++) { x[i] = ((float)i + 0.5) / 256.0; data[i] = 0.; } for (i = 0; i < xr->nx * xr->ny * xr->nz; i++) { data[xr->data[i]] += 1.0; } for (i = 0; i < 256; i++) { data[i] = log10f(data[i]+1); } fprintf(stdout,"Normalised data value\tLog(count)\t%s\n", argv[1]); for (i = 0; i < 256; i++) { fprintf(stdout,"%4.8f\t%4.8f\n", x[i],data[i]); } 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[]) { #define FNAMELEN 400 char ifname[FNAMELEN+1]; int haveifname = 0; char ofname[FNAMELEN+1]; int haveofname = 0; int use_rows = 0; int stride[3] = {1,1,1}; //{3,3,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], "-R")) { use_rows = atoi(argv[++ic]); } 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"); VOL_STRUCT *vol = Xraw2Xvol(xr, stride); if (!vol) { fprintf(stderr, "Failed to parse data volume.\n"); return -1; } showXvol(vol); int nx, ny, nz; nx = vol->nx; ny = vol->ny; nz = vol->nz; bitmap_t bits; if (use_rows == 1) { bits.w = nx * nz; bits.h = ny; bits.pix = (pixel_t *)malloc(nx*ny*nz*sizeof(pixel_t)); int i, j, k; float val; uint8_t grey; for (i = 0; i < nx; i++) { for (j = 0; j < ny; j++) { for (k = 0; k < nz; k++) { val = vol->data[i][j][k]; grey = val * 255.0; bits.pix[(nx*nz)*j + (k*nx+i)].r = grey; bits.pix[(nx*nz)*j + (k*nx+i)].g = grey; bits.pix[(nx*nz)*j + (k*nx+i)].b = grey; } } } } else { int Nzx, Nzy; if (use_rows > 1) { Nzy = use_rows; Nzx = nz/Nzy; if (nz % Nzy) { Nzx++; } } else { Nzx = (int)(floorf(sqrtf((float)nz))); if (Nzx * Nzx == nz) { Nzy = Nzx; } else { Nzx++; Nzy = (nz / Nzx) + 1; } } fprintf(stderr, "mosaic dimensions are: %d %d\n", Nzx, Nzy); bits.w = nx * Nzx; bits.h = ny * Nzy; bits.pix = (pixel_t *)malloc(nx * ny * Nzx * Nzy * sizeof(pixel_t)); int i, j, k; int izx, izy; float val; uint8_t grey; for (i = 0; i < nx; i++) { for (j = 0; j < ny; j++) { for (k = 0; k < nz; k++) { val = vol->data[i][j][k]; grey = val * 255.0; izy = k / Nzx; izx = k % Nzx; bits.pix[(nx*Nzx)*(izy*ny+j) + (izx*nx+i)].r = grey; bits.pix[(nx*Nzx)*(izy*ny+j) + (izx*nx+i)].g = grey; bits.pix[(nx*Nzx)*(izy*ny+j) + (izx*nx+i)].b = grey; } } } } FILE *fout = fopen(ofname, "w"); if (fout) { savePNG(fout, &bits); fclose(fout); } else { fprintf(stderr, "Failed to open '%s' for writing.\n", ofname); return -1; } return 0; }