/* apply highpass filter to greymap. Return 0 on success, 1 on error with errno set. */ static int highpass(greymap_t *gm, double lambda) { greymap_t *gm1; double f; int x, y; /* create a copy */ gm1 = gm_dup(gm); if (!gm1) { return 1; } /* apply lowpass filter to the copy */ lowpass(gm1, lambda); /* subtract copy from original */ for (y=0; y<gm->h; y++) { for (x=0; x<gm->w; x++) { f = GM_UGET(gm, x, y); f -= GM_UGET(gm1, x, y); f += 128; /* normalize! */ GM_UPUT(gm, x, y, f); } } gm_free(gm1); return 0; }
void AccessTraceWriter::dump(bool cont) { hid_t fid = H5Fopen(fname.c_str(), H5F_ACC_RDWR, H5P_DEFAULT); if (fid == H5I_INVALID_HID) panic("Could not open HDF5 file %s", fname.c_str()); hid_t table = H5PTopen(fid, "accs"); if (table == H5I_INVALID_HID) panic("Could not open HDF5 packet table"); herr_t err = H5PTappend(table, cur, buf); assert(err >= 0); if (!cont) { hid_t fAttr = H5Aopen(fid, "finished", H5P_DEFAULT); uint32_t finished = 1; H5Awrite(fAttr, H5T_NATIVE_UINT, &finished); H5Aclose(fAttr); gm_free(buf); buf = nullptr; max = 0; } cur = 0; H5PTclose(table); H5Fclose(fid); }
static void process_file(FILE *fin, FILE *fout, char *infile, char *outfile) { int r; greymap_t *gm; potrace_bitmap_t *bm; void *sm; int x, y; int count; for (count=0; ; count++) { r = gm_read(fin, &gm); switch (r) { case -1: /* system error */ fprintf(stderr, "mkbitmap: %s: %s\n", infile, strerror(errno)); exit(2); case -2: /* corrupt file format */ fprintf(stderr, "mkbitmap: %s: file format error: %s\n", infile, gm_read_error); exit(2); case -3: /* empty file */ if (count>0) { /* end of file */ return; } fprintf(stderr, "mkbitmap: %s: empty file\n", infile); exit(2); case -4: /* wrong magic */ if (count>0) { fprintf(stderr, "mkbitmap: %s: warning: junk at end of file\n", infile); return; } fprintf(stderr, "mkbitmap: %s: file format not recognized\n", infile); fprintf(stderr, "Possible input file formats are: pnm (pbm, pgm, ppm), bmp.\n"); exit(2); case 1: /* unexpected end of file */ fprintf(stderr, "mkbitmap: %s: warning: premature end of file\n", infile); break; } if (info.invert) { for (y=0; y<gm->h; y++) { for (x=0; x<gm->w; x++) { GM_UPUT(gm, x, y, 255-GM_UGET(gm, x, y)); } } } if (info.highpass) { r = highpass(gm, info.lambda); if (r) { fprintf(stderr, "mkbitmap: %s: %s\n", infile, strerror(errno)); exit(2); } } if (info.lowpass) { lowpass(gm, info.lambda1); } if (info.scale == 1 && info.bilevel) { /* no interpolation necessary */ sm = threshold(gm, info.level); gm_free(gm); } else if (info.scale == 1) { sm = gm; } else if (info.linear) { /* linear interpolation */ sm = interpolate_linear(gm, info.scale, info.bilevel, info.level); gm_free(gm); } else { /* cubic interpolation */ sm = interpolate_cubic(gm, info.scale, info.bilevel, info.level); gm_free(gm); } if (!sm) { fprintf(stderr, "mkbitmap: %s: %s\n", infile, strerror(errno)); exit(2); } if (info.bilevel) { bm = (potrace_bitmap_t *)sm; bm_writepbm(fout, bm); bm_free(bm); } else { gm = (greymap_t *)sm; gm_writepgm(fout, gm, NULL, 1, GM_MODE_POSITIVE, 1.0); gm_free(gm); } } }