/* Save counter. */ static void saveCntr(cstrCtx h) { Cntr *cntr; long index = dnaNext(&h->cntrs, sizeof(Cntr)); if (index == -1) { h->g->err.code = cfwErrNoMemory; return; } cntr = &h->cntrs.array[index]; cntr->iMask = h->masks.cnt; cntr->size = saveMask(h, h->cntrmask); }
/* Save hint. */ static void saveHint(cstrCtx h) { Hint *hint; long index = dnaNext(&h->hints, sizeof(Hint)); if (index == -1) { h->g->err.code = cfwErrNoMemory; return; } hint = &h->hints.array[index]; hint->iCstr = h->iCstr; hint->iMask = h->masks.cnt; hint->size = saveMask(h, h->hintmask); }
void maskImageWidget::init(const QImage& image) { setWindowTitle(tr("Mask Editor")); QPixmap load("coral_open32x32.png"); QPixmap save("coral_save32x32.png"); QPixmap undo("coral_undo32x32.png"); QPixmap redo("coral_redo32x32.png"); QPixmap pen("coral_pencil32x32.png"); QPixmap eraser("coral_eraser32x32.png"); QAction *canvasloadmask = new QAction(this); canvasloadmask->setIcon(load); canvasloadmask->setText(tr("&Load Mask")); QAction *canvassavemask = new QAction(this); canvassavemask->setIcon(QIcon(save)); canvassavemask->setText(tr("&Save Mask")); QAction *canvasundo = new QAction(this); canvasundo->setIcon(QIcon(undo)); canvasundo->setText(tr("&Undo")); canvasundo->setShortcut(QKeySequence("Ctrl+Z")); QAction *canvasredo = new QAction(this); canvasredo->setIcon(QIcon(redo)); canvasredo->setText(tr("&Redo")); canvasredo->setShortcut(QKeySequence("Ctrl+Shift+Z")); QAction *canvasclear = new QAction(tr("&Clear"), this); canvasclear->setShortcut(QKeySequence("Ctrl+C")); QAction *canvaspen = new QAction(this); canvaspen->setIcon(QIcon(pen)); canvaspen->setText(tr("&Pen")); QAction *canvaseraser = new QAction(this); canvaseraser->setIcon(QIcon(eraser)); canvaseraser->setText(tr("&Eraser")); QActionGroup *actions(new QActionGroup(this)); actions->addAction(canvaspen); actions->addAction(canvaseraser); canvaspen->setCheckable(true); canvaseraser->setCheckable(true); canvaspen->setChecked(true); actions->setExclusive(true); QAction *canvasOK = new QAction(this); canvasOK->setText("OK"); QAction *canvasCancel = new QAction(this); canvasCancel->setText("Cancel"); QBoxLayout *layout(new QVBoxLayout(this)); // We don't want a real-size image. We will downscale it! QImage image_to_use = image; pimpl_->realwidth_ = image.width(); pimpl_->realheight_ = image.height(); qDebug("maskImageWidget::Init real wxh %i x%i",pimpl_->realwidth_,pimpl_->realheight_); QDesktopWidget *desktop(QApplication::desktop()); if (image.width() > (desktop->width() * .8) || image.height() > (desktop->height() * .8)) { int width(desktop->width()), height(desktop->height()); image_to_use = image.scaled((int)std::floor(width * .75), (int)std::floor(height * .75), Qt::KeepAspectRatio); } pimpl_->render_area_ = new maskRenderWidget(image_to_use, this); QToolBar *canvas_toolbar(new QToolBar(this)); canvas_toolbar->addSeparator(); canvas_toolbar->addAction(canvasloadmask); canvas_toolbar->addAction(canvassavemask); canvas_toolbar->addSeparator(); canvas_toolbar->addAction(canvasundo); canvas_toolbar->addAction(canvasredo); canvas_toolbar->addSeparator(); QSpinBox *pen_width(new QSpinBox(canvas_toolbar)); pen_width->setToolTip(tr("Pen Width")); pen_width->setRange(0, 80); pen_width->setSingleStep(2); pen_width->setValue(16); connect(pen_width, SIGNAL(valueChanged(int)), SLOT(setCanvasPenWidth(int))); canvas_toolbar->addWidget(pen_width); canvas_toolbar->addAction(canvaspen); canvas_toolbar->addAction(canvaseraser); canvas_toolbar->addSeparator(); QSpinBox *gradient(new QSpinBox(canvas_toolbar)); gradient->setToolTip("Gradient Threshold"); gradient->setRange(0, 255); gradient->setValue(pimpl_->threshold_gradient_); connect(gradient, SIGNAL(valueChanged(int)), SLOT(setGradientThreshold(int))); QSpinBox *fixed(new QSpinBox(canvas_toolbar)); fixed->setToolTip("Fixed Threshold"); fixed->setRange(0, 255); fixed->setValue(pimpl_->threshold_fixed_); connect(fixed, SIGNAL(valueChanged(int)), SLOT(setFixedThreshold(int))); canvas_toolbar->addWidget(gradient); canvas_toolbar->addWidget(fixed); canvas_toolbar->addSeparator(); canvas_toolbar->addAction(canvasOK); canvas_toolbar->addAction(canvasCancel); layout->addWidget(canvas_toolbar); layout->addWidget(pimpl_->render_area_); layout->setSizeConstraint(QLayout::SetFixedSize); connect(canvasloadmask, SIGNAL(activated()), SLOT(loadMask())); connect(canvassavemask, SIGNAL(activated()), SLOT(saveMask())); connect(canvasundo, SIGNAL(activated()), pimpl_->render_area_, SLOT(undo())); connect(canvasredo, SIGNAL(activated()), pimpl_->render_area_, SLOT(redo())); connect(canvasclear, SIGNAL(activated()), pimpl_->render_area_, SLOT(clear())); connect(canvaspen, SIGNAL(activated()), SLOT(setCanvasPen())); connect(canvaseraser, SIGNAL(activated()), SLOT(setCanvasEraser())); connect(pimpl_->render_area_, SIGNAL(pointSelected(const QPoint &)), SLOT(automaticMask(const QPoint &))); connect(canvasOK, SIGNAL(activated()), SLOT(accept())); connect(canvasCancel, SIGNAL(activated()), SLOT(reject())); }
int main(int argc, char *argv[]) { int seedX=-1,seedY=-1; char szWrap[MAXNAME], szUnwrap[MAXNAME]; meta_parameters *meta; logflag=0; while (currArg < (argc-2)) { char *key = argv[currArg++]; if (strmatch(key,"-log")) { CHECK_ARG(1); strcpy(logFile,GET_ARG(1)); fLog = FOPEN(logFile, "a"); logflag = 1; } else if (strmatch(key,"-x")) { CHECK_ARG(1); sscanf(GET_ARG(1), "%d", &seedX); } else if (strmatch(key,"-y")) { CHECK_ARG(1); sscanf(GET_ARG(1), "%d", &seedY); } else { printf("\n ***Invalid option: %s\n", argv[currArg-1]); usage(argv[0]); } } create_name(szWrap, argv[currArg++], ".img"); create_name(szUnwrap, argv[currArg], ".img"); printf("%s\n",date_time_stamp()); printf("Program: escher\n\n"); if (logflag) { StartWatchLog(fLog); printLog("Program: escher\n\n"); } meta = meta_read(szWrap); wid = meta->general->sample_count; len = meta->general->line_count; if ((seedX==-1)&&(seedY==-1)) { seedX=wid/2; seedY=len/2; } meta_write(meta, szUnwrap); size = wid*len; mask = (Uchar *)calloc(size, sizeof(Uchar)); im = (Uchar *)calloc(size, sizeof(Uchar)); phase = (float *)MALLOC(sizeof(float)*size); /*coh = (float *)MALLOC(sizeof(float)*size);*/ /* perform steps*/ printf("\n begin unwrapping phase...\n"); loadWrappedPhase(szWrap); groundBorder(); makeMask(); doStats(" after makeMask():"); installCordon("cordon"); cutMask(); doStats(" after cutMask():"); #if DO_DEBUG_CHECKS saveMask((char *)mask, "test"); verifyCuts(); #endif checkSeed(&seedX, &seedY); integratePhase(seedX, seedY); doStats(" after integratePhase():"); finishUwp(); saveMask(mask, szUnwrap); saveUwp(szUnwrap); /* clean up & save*/ free(mask); free(im); free(phase); return(0); }