Example #1
0
/**
 * 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;
}
Example #2
0
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();
}