/** * build IMAGE image from data array indata */ IMAGE *buildFITSfromdat(size_t h, size_t w, int dtype, uint8_t *indata){ size_t stride = 0; double (*fconv)(uint8_t *data) = NULL; double ubyteconv(uint8_t *data){return (double)*data;} double ushortconv(uint8_t *data){return (double)*(int16_t*)data;} double ulongconv(uint8_t *data){return (double)*(uint32_t*)data;} double ulonglongconv(uint8_t *data){return (double)*(uint64_t*)data;} double floatconv(uint8_t *data){return (double)*(float*)data;} IMAGE *out = newFITS(h, w, dtype); switch (dtype){ case BYTE_IMG: stride = 1; fconv = ubyteconv; break; case SHORT_IMG: stride = 2; fconv = ushortconv; break; case LONG_IMG: stride = 4; fconv = ulongconv; break; case FLOAT_IMG: stride = 4; fconv = floatconv; break; case LONGLONG_IMG: fconv = ulonglongconv; stride = 8; break; case DOUBLE_IMG: memcpy(out->data, indata, sizeof(double)*w*h); return out; break; default: /// Неправильный тип данных ERRX(_("Wrong data type")); } size_t y, W = w*stride; Item *data = out->data; OMP_FOR(shared(data)) for(y = 0; y < h; ++y){ Item *dout = &data[y*w]; uint8_t *din = &indata[y*W]; size_t x; for(x = 0; x < w; ++x, din += stride) *dout++ = fconv(din); } return out; }
void imagesequence::startSequence() { if (active) stopSequence(); // Let's find out which device has been selected and that it's connected. if (!verifyCCDIntegrity()) return; // Get expose paramater active = true; ISOStamp = ISOCheck->isChecked() ? true : false; seqExpose = exposureIN->value(); seqTotalCount = countIN->value(); seqCurrentCount = 0; seqDelay = delayIN->value() * 1000; /* in ms */ currentCCD = CCDCombo->currentText(); lastCCD = CCDCombo->currentItem(); currentFilter = filterCombo->currentText(); lastFilter = filterCombo->currentItem(); fullImgCountOUT->setText( QString("%1").arg(seqTotalCount)); currentImgCountOUT->setText(QString("%1").arg(seqCurrentCount)); // Ok, now let's connect signals and slots for this device connect(stdDevCCD, SIGNAL(FITSReceived(QString)), this, SLOT(newFITS(QString))); // set the progress info imgProgress->setEnabled(true); imgProgress->setTotalSteps(seqTotalCount); imgProgress->setProgress(seqCurrentCount); stdDevCCD->batchMode = true; stdDevCCD->ISOMode = ISOStamp; // Set this LAST stdDevCCD->updateSequencePrefix(prefixIN->text()); // Update button status startB->setEnabled(false); stopB->setEnabled(true); prepareCapture(); }