//获得相机个数 public static int getCameras() { camAnz = 0; if (hCameraContainer != GigeApi.SVGigE_NO_CLIENT) { myApi.Gige_CameraContainer_delete(hCameraContainer); } hCameraContainer = myApi.Gige_CameraContainer_create(GigeApi.SVGigETL_Type.SVGigETL_TypeFilter); if (hCameraContainer >= 0) { errorflag = myApi.Gige_CameraContainer_discovery(hCameraContainer); if (errorflag == GigeApi.SVSGigeApiReturn.SVGigE_SUCCESS) { camAnz = myApi.Gige_CameraContainer_getNumberOfCameras(hCameraContainer); } } if (camAnz > 0) { CameraList = new SVS_Camera[camAnz]; for (int i = 0; i < camAnz; i++) { CameraList[i] = new SVS_Camera(); CameraList[i].CameraIndex = i; CameraList[i].InitSvsCamer(1); CameraList[i].SetSVSCameraMode(0); CameraList[i].hCamera = SVS_CameraSys.myApi.Gige_CameraContainer_getCamera(SVS_CameraSys.hCameraContainer, i); CameraList[i].modelname = SVS_CameraSys.myApi.Gige_Camera_getModelName(CameraList[i].hCamera); CameraList[i].SN = SVS_CameraSys.myApi.Gige_Camera_getSerialNumber(CameraList[i].hCamera); CameraList[i].GetSvsCamFps(); //帧率初始化 CameraList[i].GetExpTime(); //曝光时间初始化 CameraList[i].GetGainValue(); //增益初始化 CameraList[i].StopLive(); } } return(camAnz); }
//相机初始化 public void InitSvsCamer(int FilterMode) { //hCamera = new IntPtr(-1); //hCameraContainer = -1; //PacketSize = 0; //switch (FilterMode) //{ // case 1: //Filter 模式 // if (hCameraContainer != GigeApi.SVGigE_NO_CLIENT) // { // myApi.Gige_CameraContainer_delete(hCameraContainer); // } // hCameraContainer = myApi.Gige_CameraContainer_create(GigeApi.SVGigETL_Type.SVGigETL_TypeFilter); // break; // case 2: //WinSock模式 // if (hCameraContainer != GigeApi.SVGigE_NO_CLIENT) // { // myApi.Gige_CameraContainer_delete(hCameraContainer); // } // hCameraContainer = myApi.Gige_CameraContainer_create(GigeApi.SVGigETL_Type.SVGigETL_TypeWinSock); // break; //} hCamera = new IntPtr(GigeApi.SVGigE_NO_CAMERA); SVS_CameraSys.myApi.Gige_CameraContainer_discovery(SVS_CameraSys.hCameraContainer); //查找相机 hCamera = SVS_CameraSys.myApi.Gige_CameraContainer_getCamera(SVS_CameraSys.hCameraContainer, CameraIndex); //获得指定相机 if (hCamera.ToInt32() != 0) { modelname = SVS_CameraSys.myApi.Gige_Camera_getModelName(hCamera);//获得相机名 GigeApi.SVSGigeApiReturn ret = SVS_CameraSys.myApi.Gige_Camera_openConnection(hCamera, timeout); if (ret != GigeApi.SVSGigeApiReturn.SVGigE_SUCCESS) { System.Windows.Forms.MessageBox.Show("相机连接失败: " + ret);//连接相机 } GigeCallBack = new GigeApi.StreamCallback(myStreamCallback); SVS_CameraSys.myApi.Gige_Camera_evaluateMaximalPacketSize(hCamera, ref (PacketSize)); //获取数据包 SVS_CameraSys.myApi.Gige_Camera_setBinningMode(hCamera, GigeApi.BINNING_MODE.BINNING_MODE_OFF); //关闭Binning SVS_CameraSys.myApi.Gige_StreamingChannel_create(ref (hStreamingChannel), SVS_CameraSys.hCameraContainer, hCamera, 3, GigeCallBack, new IntPtr(0)); //创建数据通道 SVS_CameraSys.myApi.Gige_Camera_getSizeX(hCamera, ref (camWidth)); //获得图像宽 SVS_CameraSys.myApi.Gige_Camera_getSizeY(hCamera, ref (camHeight)); //获得图像高 GigeApi.SVSGigeApiReturn apiReturn; PixelDepth = GigeApi.SVGIGE_PIXEL_DEPTH.SVGIGE_PIXEL_DEPTH_8; apiReturn = SVS_CameraSys.myApi.Gige_Camera_getPixelDepth(hCamera, ref (PixelDepth));//获得位深度 if (apiReturn == GigeApi.SVSGigeApiReturn.SVGigE_SUCCESS) { switch (PixelDepth) { case (GigeApi.SVGIGE_PIXEL_DEPTH.SVGIGE_PIXEL_DEPTH_8): { bitCount = 8; break; } case (GigeApi.SVGIGE_PIXEL_DEPTH.SVGIGE_PIXEL_DEPTH_12): { bitCount = 12; break; } case (GigeApi.SVGIGE_PIXEL_DEPTH.SVGIGE_PIXEL_DEPTH_16): { bitCount = 16; break; } default: { bitCount = 8; break; } } } bayerPttern = false; PixelType = GigeApi.GVSP_PIXEL_TYPE.GVSP_PIX_UNKNOWN; apiReturn = SVS_CameraSys.myApi.Gige_Camera_getPixelType(hCamera, ref (PixelType));//获得颜色格式 if (apiReturn == GigeApi.SVSGigeApiReturn.SVGigE_SUCCESS) { switch (PixelType) { case GigeApi.GVSP_PIXEL_TYPE.GVSP_PIX_MONO8: { bayerPttern = false; break; } case GigeApi.GVSP_PIXEL_TYPE.GVSP_PIX_MONO12: { bayerPttern = false; break; } case GigeApi.GVSP_PIXEL_TYPE.GVSP_PIX_MONO16: { bayerPttern = false; break; } case GigeApi.GVSP_PIXEL_TYPE.GVSP_PIX_RGB24: { bayerPttern = true; break; } case GigeApi.GVSP_PIXEL_TYPE.GVSP_PIX_BAYGR8: { bayerPttern = true; break; } case GigeApi.GVSP_PIXEL_TYPE.GVSP_PIX_BAYRG8: { bayerPttern = true; break; } case GigeApi.GVSP_PIXEL_TYPE.GVSP_PIX_BAYGB8: { bayerPttern = true; break; } case GigeApi.GVSP_PIXEL_TYPE.GVSP_PIX_BAYBG8: { bayerPttern = true; break; } case GigeApi.GVSP_PIXEL_TYPE.GVSP_PIX_BAYGR12: { bayerPttern = true; break; } case GigeApi.GVSP_PIXEL_TYPE.GVSP_PIX_BAYRG12: { bayerPttern = true; break; } case GigeApi.GVSP_PIXEL_TYPE.GVSP_PIX_BAYGB12: { bayerPttern = true; break; } case GigeApi.GVSP_PIXEL_TYPE.GVSP_PIX_BAYBG12: { bayerPttern = true; break; } default: { bayerPttern = false; break; } } } } imagebuffer = new imagebufferStruct[bufferCount]; imagebuffer[0].imagebytes = new byte[camHeight * camWidth]; imagebufferRGB = new imagebufferStruct[bufferCount]; imagebufferRGB[0].imagebytes = new byte[3 * camWidth * camHeight]; }