void CMainFrame::OnSnapexStop() { // TODO: Add your command handler code here HVSTATUS status =STATUS_OK; // 停止采集图像到内存,可以再次调用HVStartSnapEx启动数字摄像机采集 status = HVStopSnap(m_hhv); HV_VERIFY(status); if (HV_SUCCESS(status)) { m_bStart = FALSE; } }
void CMainFrame::OnSnapexClose() { // TODO: Add your command handler code here HVSTATUS status = STATUS_OK; /* * 终止数字摄像机采集图像到内存,同时释放所有采集环境, * 再次启动数字摄像机采集,必须重新初始化 */ status = HVCloseSnap(m_hhv); HV_VERIFY(status); if (HV_SUCCESS(status)) { m_bOpen = FALSE; m_bStart = FALSE; } }
void CMainFrame::OnSnapexStart() { // TODO: Add your command handler code here HVSTATUS status = STATUS_OK; /* * 启动数字摄像机采集图像到内存 */ BYTE *ppBuf[1]; ppBuf[0] = m_pRawBuffer; status = HVStartSnap(m_hhv, ppBuf,1); HV_VERIFY(status); if (HV_SUCCESS(status)) { m_bStart = TRUE; } }
/************************************************************************** 函数: SetExposureTime 输入参数: int nWindWidth 当前图像宽度 int lTintUpper 曝光时间的分子,shutter的取值 int lTintLower 曝光时间的分母,与shutter的单位相关 (ms:1000;s:1) 输出参数: 无 说明: 设置曝光时间(其他的参数如摄像机时钟频率,消隐值都取默认值) ***************************************************************************/ HVSTATUS HV_Camera::SetExposureTime(int nWindWidth, long lTintUpper, long lTintLower, long HBlanking, HV_SNAP_SPEED SnapSpeed, HV_RESOLUTION Resolution) { HVTYPE type = UNKNOWN_TYPE; int size = sizeof(HVTYPE); HVGetDeviceInfo(m_hhv,DESC_DEVICE_TYPE, &type, &size); int nOutputWid = nWindWidth; double dExposure = 0.0; double dTint = max((double)lTintUpper/(double)lTintLower,MY_ZERO); double lClockFreq = 0.0; if (IS_USB_GV400(type)) { long lTb = HBlanking; lTb += 0x5e; lClockFreq = (SnapSpeed == HIGH_SPEED)? 26600000.0:13300000.0; long rate = 0; switch(Resolution) { case RES_MODE0: rate = 1; break; case RES_MODE1: rate = 2; break; default: return STATUS_PARAMETER_OUT_OF_BOUND; } nOutputWid = nOutputWid * rate; //width*rate if ((dTint * lClockFreq) <= (nOutputWid+ lTb - 255)) { dExposure = 1; } else dExposure = ((dTint * lClockFreq) - (nOutputWid + lTb - 255) ) / (nOutputWid + lTb); if (dExposure < 3) dExposure = 3; else if (dExposure > 32766) dExposure = 32766; } else if( IS_USB_HV300(type)) { lClockFreq = (SnapSpeed == HIGH_SPEED)? 24000000:12000000; long lTb = HBlanking; lTb += 142; if(lTb<21) lTb = 21; long lP1 = 331, lP2 = 38; long lp4 = 316; if(Resolution == RES_MODE1) { lP1 = 673; lP2 = 22; lp4 = 316*2; } long lAQ = (long)(nOutputWid + lP1 + lP2 + lTb); long lTrow = max(lAQ,(lP1+lp4)); dExposure = ((dTint* lClockFreq)+ lP1 - 132.0)/lTrow; if((dExposure-(int)dExposure) >0.5) dExposure += 1.0; if(dExposure <= 0) dExposure = 1; else if(dExposure > 1048575) dExposure = 1048575; } else if(IS_USB_HV200(type)) { lClockFreq = (SnapSpeed == HIGH_SPEED)? 24000000:12000000; long lTb = HBlanking; lTb += 53; if(lTb<19) lTb = 19; long lAQ = (long)(nOutputWid + 305.0 + lTb); long lTrow = max(617,lAQ); dExposure = (dTint* lClockFreq + 180.0)/lTrow + 1; if((dExposure-(int)dExposure) >0.5)//四舍五入 dExposure += 1.0; if(dExposure <= 0) dExposure = 1; else if(dExposure > 16383) dExposure = 16383; } else if(IS_USB_HV5051(type)) { SHUTTER_UNIT_VALUE nUnit = SHUTTER_MS; HVSTATUS status = STATUS_OK; if (lTintLower == 1000000) { nUnit = SHUTTER_US; } //设置曝光时间单位 status = HVAECControl(m_hhv, AEC_SHUTTER_UNIT, nUnit); if (!HV_SUCCESS(status)) { return status; } //设置曝光时间。 return HVAECControl(m_hhv, AEC_SHUTTER_SPEED, lTintUpper); } else { lClockFreq = (SnapSpeed == HIGH_SPEED)? 24000000:12000000; long lTb = HBlanking; lTb += 9; lTb -= 19; if(lTb <= 0) lTb =0; if(((double)nOutputWid + 244.0 + lTb ) > 552) dExposure = (dTint* lClockFreq + 180.0)/((double)nOutputWid + 244.0 + lTb); else dExposure = ((dTint * lClockFreq)+ 180.0) / 552 ; if((dExposure-(int)dExposure) >0.5) dExposure += 1.0; if(dExposure <= 0) dExposure = 1; else if(dExposure > 16383) dExposure = 16383; } return HVAECControl(m_hhv, AEC_EXPOSURE_TIME, (long)dExposure); }