Пример #1
0
void ofxffmv::initializeWithGUID(GUID cameraGuid,int cameraWidth,int cameraHeight,int cameraLeft,int cameraTop,bool useROI,unsigned char cameraDepth,int cameraFramerate,bool isPlaying)
{
	FlyCaptureInfoEx* tempArInfo = new FlyCaptureInfoEx[_MAX_CAMERAS_];
	unsigned int camNum = 0;
	flycaptureBusEnumerateCamerasEx( tempArInfo, &camNum );
	for (int i=0;i<camNum;i++)
	{
		if ((unsigned long)tempArInfo[i].SerialNumber == cameraGuid.Data1)
			index = i;
	}
	arInfo = tempArInfo[index];
	flycaptureCreateContext(&context);
	flycaptureInitialize( context, index );
	guid = cameraGuid;
	width = cameraWidth;
	height = cameraHeight;
	framerate = cameraFramerate;
	left = cameraLeft;
	top = cameraTop;
	roiMode = useROI;
	depth = cameraDepth;
	flycaptureStartCustomImage(context,0,left,top,width,height,100,FLYCAPTURE_MONO8);
	flycaptureGrabImage2( context, &fcImage );
	width = fcImage.iCols;
	height = fcImage.iRows;
	depth = (width*height!=0) ? fcImage.iRowInc/fcImage.iRows : 0;
	flycaptureSetColorProcessingMethod( context,FLYCAPTURE_DISABLE);
	isInitialized = true;
	delete tempArInfo;
}
// capture image
// for bumblebee2
bool IEEE1394Cam::CaptureImages(unsigned char* bufferL, unsigned char*bufferR) {
	if (!_activated){return false;}
#ifdef WIN32
	FlyCaptureError fe;
	FlyCaptureImage flycaptureImage;
	// Grab an image from the camera
	fe = flycaptureGrabImage2( _flycapture, &flycaptureImage );
	if (fe != FLYCAPTURE_OK) {
		return false;
	}

	if (flycaptureImage.pixelFormat != FLYCAPTURE_RAW16) {
		if (_ptype == PIXEL_BGR) {
			flycaptureInplaceRGB24toBGR24(flycaptureImage.pData, flycaptureImage.iRows*flycaptureImage.iCols*flycaptureImage.iNumImages);
		}
		for (int i=0; i<flycaptureImage.iRows; ++i){
			memcpy(&bufferR[flycaptureImage.iRowInc*flycaptureImage.iNumImages*i], &flycaptureImage.pData[flycaptureImage.iRowInc*flycaptureImage.iNumImages*i], flycaptureImage.iRowInc);
			memcpy(&bufferL[flycaptureImage.iRowInc*(flycaptureImage.iNumImages*(i-1)+1)], &flycaptureImage.pData[flycaptureImage.iRowInc*(flycaptureImage.iNumImages*(i-1)+1)], flycaptureImage.iRowInc);
		}
	} else {
		// convert pixel format to RGB or BGR
		FlyCaptureImage rgb_image;
		unsigned char* buf = new unsigned char[flycaptureImage.iRows*flycaptureImage.iCols*flycaptureImage.iNumImages*4];
		rgb_image.pData = buf;
		flycaptureSetColorProcessingMethod( _flycapture, FLYCAPTURE_EDGE_SENSING );
		flycaptureConvertImage( _flycapture, &flycaptureImage, &rgb_image); // �x�C���[->BGRU
		unsigned char* dstR = bufferR;
		unsigned char* dstL = bufferL;
		unsigned char* src = buf;
		if (_ptype == PIXEL_BGR) { 
			for (int i=0; i<rgb_image.iRows; ++i) { // BGRU->BGR
				// right image
				for (int j=0; j< flycaptureImage.iCols; ++j) {
					dstR[0] = src[0];//b
					dstR[1] = src[1];//g
					dstR[2] = src[2];//r
					dstR+=3; src+=4;
				}
				// left image
				for (int j=0; j< flycaptureImage.iCols; ++j) {
					dstL[0] = src[0];//b
					dstL[1] = src[1];//g
					dstL[2] = src[2];//r
					dstL+=3; src+=4;
				}
			}
		} else {
			for (int i=0; i<rgb_image.iRows; ++i) { // BGRU->RGB
				// right image
				for (int j=0; j< flycaptureImage.iCols; ++j) {
					dstR[0] = src[2];//r
					dstR[1] = src[1];//g
					dstR[2] = src[0];//b
					dstR+=3; src+=4;
				}
				// left iamge
				for (int j=0; j< flycaptureImage.iCols; ++j) {
					dstL[0] = src[2];//r
					dstL[1] = src[1];//g
					dstL[2] = src[0];//b
					dstL+=3; src+=4;
				}
			}
		}
		delete [] buf;
	}

	return true;
#else
	return false;
#endif //WIN32
}