⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdk2000.cpp

📁 停车场用
💻 CPP
字号:
//---------------------------------------------------------------------------
//图象卡相关函数
#ifndef _MSC_VER
#include <windows.h>
#else
#include <stdafx.h>
#endif

#include "SDK2000.h"
#include "DSStream.h"

 //此.DLL库函数调用成功返回值为0

//初始化动态库
static int InitSDK2000DLL(void);
//获取动态库中的函数
static FARPROC GetOneProcOnDll(LPCSTR lpProcName);
//设置卡的属性
static int SetOneCardParam(void);
//初始化图像卡
static int InitOneCard(HWND hParent,HWND hImage);
//获取标题
static char *GetImagerTitle(void);

//获取函数过程
static int GetSomeProcess(void);
//复位一些函数
static void ResetSomeProcess(void);

static HMODULE hModuleDll=NULL;
static HWND hWndImage;

static tdDSStream_GetCurrentDib      DSStream_GetCurrentDib=NULL;
static tdDSStream_GetStreamStatus    DSStream_GetStreamStatus=NULL;
static tdDSStream_SetStreamStatus    DSStream_SetStreamStatus=NULL;
static tdDSStream_SetWindowPos       DSStream_SetWindowPos=NULL;
static tdDSStream_RouteInPinToOutPin DSStream_RouteInPinToOutPin;
static tdDSStream_WhatInPinRouteToOutPin DSStream_WhatInPinRouteToOutPin;

static tdDSStream_GetVideoInfo       DSStream_GetVideoInfo;
static tdDSStream_SetVideoInfo       DSStream_SetVideoInfo;
static tdDSStream_SetVideoPropertyValue DSStream_SetVideoPropertyValue;
static tdDSStream_GetVideoPropertyValue DSStream_GetVideoPropertyValue;
static tdDSStream_SetVideoStandard   DSStream_SetVideoStandard;

static tdDSStream_ConnectPin         DSStream_ConnectPin ;
static tdDSStream_IsConnected        DSStream_IsConnected;
static tdDSStream_DisconnectPin      DSStream_DisconnectPin;

//初始化动态库
int InitSDK2000DLL(void)
{
 int rc;

 if(hModuleDll!=NULL)return((int)hModuleDll);

 hModuleDll = LoadLibrary("DSStream.dll");
 if(hModuleDll){
   rc=GetSomeProcess();
   if(rc==FALSE){//获取函数失败
     SDK2000_UnInit();
     hModuleDll=NULL;
    }
  }
 return((int)hModuleDll);
}
//获取函数过程
int GetSomeProcess(void)
 {
  void *pFun;

  pFun=GetOneProcOnDll("DSStream_GetCurrentDib");
  DSStream_GetCurrentDib = (tdDSStream_GetCurrentDib)pFun;

  if(pFun!=NULL){
    pFun=GetOneProcOnDll("DSStream_WhatInPinRouteToOutPin");
    DSStream_WhatInPinRouteToOutPin = (tdDSStream_WhatInPinRouteToOutPin)pFun;
   }
  if(pFun!=NULL){
    pFun=GetOneProcOnDll("DSStream_RouteInPinToOutPin");
    DSStream_RouteInPinToOutPin = (tdDSStream_RouteInPinToOutPin)pFun;
   }
  if(pFun!=NULL){
    pFun=GetOneProcOnDll("DSStream_GetStreamStatus");
    DSStream_GetStreamStatus = (tdDSStream_GetStreamStatus)pFun;
   }
  if(pFun!=NULL){
    pFun=GetOneProcOnDll("DSStream_SetStreamStatus");
    DSStream_SetStreamStatus = (tdDSStream_SetStreamStatus)pFun;
   }
  if(pFun!=NULL){
    pFun=GetOneProcOnDll("DSStream_SetWindowPos");
    DSStream_SetWindowPos=(tdDSStream_SetWindowPos)pFun;
   }
 if(pFun!=NULL){
   pFun=GetOneProcOnDll("DSStream_IsConnected");
   DSStream_IsConnected=(tdDSStream_IsConnected)pFun;
  }
 if(pFun!=NULL){	//设置视频制式
   pFun=GetOneProcOnDll("DSStream_SetVideoStandard");
   DSStream_SetVideoStandard =(tdDSStream_SetVideoStandard)pFun;
  }
 if(pFun!=NULL){//设置视频源
   pFun=GetOneProcOnDll("DSStream_RouteInPinToOutPin");
   DSStream_RouteInPinToOutPin = (tdDSStream_RouteInPinToOutPin)pFun;
  }
 if(pFun!=NULL){//设置视频属性:亮度、对比度、色度、饱和度
   pFun=GetOneProcOnDll("DSStream_SetVideoPropertyValue");
   DSStream_SetVideoPropertyValue=(tdDSStream_SetVideoPropertyValue)pFun;
  }
 if(pFun!=NULL){
   pFun=GetOneProcOnDll("DSStream_GetVideoPropertyValue");
   DSStream_GetVideoPropertyValue=(tdDSStream_GetVideoPropertyValue)pFun;
  }
  return((int)pFun);
 }
//复位一些函数
void ResetSomeProcess(void)
 {
  DSStream_GetCurrentDib = NULL;
  DSStream_WhatInPinRouteToOutPin = NULL;
  DSStream_RouteInPinToOutPin = NULL;
  DSStream_GetStreamStatus = NULL;
  DSStream_SetStreamStatus = NULL;
  DSStream_SetWindowPos=NULL;
  DSStream_IsConnected=NULL;
  DSStream_SetVideoStandard =NULL;
  DSStream_RouteInPinToOutPin = NULL;
  DSStream_SetVideoPropertyValue=NULL;
  DSStream_GetVideoPropertyValue=NULL;
 }
//获取动态库中的函数
FARPROC GetOneProcOnDll(LPCSTR lpProcName)
{
 int rc;
 FARPROC p;
 char szBuf[100];

 if(hModuleDll==NULL)return(NULL);

 p = GetProcAddress(hModuleDll,lpProcName);
 if(p==NULL){
   rc = GetLastError();
   wsprintf(szBuf,"不能导入函数 \"%s\"!\n 错误代码: %d.",lpProcName,rc);
   MessageBox(NULL,szBuf,GetImagerTitle(),
   MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  }
 return(p);
}
//初始化图像卡
int InitOneCard(HWND hParent,HWND hImage)
{
 int rc;
 int nCardID,nCardNumber;
 RECT rt;
 void *pFun;

 rc=TRUE;
 nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
 hWndImage=hImage;
 if(rc){
   pFun = GetOneProcOnDll("DSStream_Initialize");
   if(pFun != NULL)
     rc=!((tdDSStream_Initialize)pFun)();//成功返回为0
    else rc=FALSE;
  }
 if(rc){
   pFun = GetOneProcOnDll("DSStream_GetCardNumber");
   if(pFun != NULL){
     rc = !((tdDSStream_GetCardNumber)pFun)(&nCardNumber);
     if(nCardNumber<=0)rc=FALSE;
    }
   else rc=FALSE;
  }
 if(rc){	//rc=DSStream_ConnectDevice(nImagerID,FALSE,hWnd);
     pFun=GetOneProcOnDll("DSStream_ConnectDevice");
     if(pFun!=NULL)
       rc=!((tdDSStream_ConnectDevice)pFun)(nCardID,FALSE,hImage);
     else rc=FALSE;
  }
 if(rc){	// DSStream_SetMessageDrain(nImagerID,hWnd);
   pFun=GetOneProcOnDll("DSStream_SetMessageDrain");
   if(pFun!=NULL)
     rc=!((tdDSStream_SetMessageDrain)pFun)(nCardID,hParent);
   else rc=FALSE;
  }
 if(rc){	// DSStream_SetNotifyWindow(nImagerID,hWnd,UM_IMAGER);
   pFun=GetOneProcOnDll("DSStream_SetNotifyWindow");
   if(pFun!=NULL)
     rc=!((tdDSStream_SetNotifyWindow)pFun)(nCardID,hParent,UM_IMAGER);
   else rc=FALSE;
  }
 if(rc){
   GetClientRect(hImage,&rt);
   rc=!DSStream_SetWindowPos(nCardID,rt);
  }
 return(rc);
}
//设置卡的属性
int SetOneCardParam(void)
{
 void *pFun;
 int rc,n;
 int nCardID;
 BOOL bConnectOk;
 VIDEOSTREAMINFO Vsi;
 VIDEOPROPERTYRANGE Vpr;


 rc=TRUE;
 nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
 if(rc){
    rc = !DSStream_IsConnected(nCardID, &bConnectOk);
    if(!bConnectOk)rc=FALSE;
  }
 if(rc)	//设置视频制式
   rc=!DSStream_SetVideoStandard(nCardID, VideoStandard_PAL_B);

 if(rc)//设置视频源
   rc=!DSStream_RouteInPinToOutPin(nCardID,1, 0);
 if(rc){//设置视频属性:亮度、对比度、色度、饱和度
   DSStream_GetVideoPropertyValue(nCardID, VideoProperty_Brightness, &Vpr);

   n = (Vpr.lMax-Vpr.lMin)/2+Vpr.lMin;
   DSStream_SetVideoPropertyValue(nCardID, VideoProperty_Brightness, n);
   DSStream_GetVideoPropertyValue(nCardID, VideoProperty_Contrast, &Vpr);

   n = (Vpr.lMax-Vpr.lMin)/2+Vpr.lMin;
   DSStream_SetVideoPropertyValue(nCardID, VideoProperty_Contrast, n);
   DSStream_SetVideoPropertyValue(nCardID, VideoProperty_Hue, 0);
   DSStream_SetVideoPropertyValue(nCardID, VideoProperty_Saturation,0);
  }
 if(rc){//设置视频格式:视频格式、宽、高
      rc=!DSStream_GetVideoInfo(nCardID, &Vsi, PREVIEW);
      Vsi.subtype = VideoSubType_RGB24;
      Vsi.bmiHeader.biWidth = 352;
      Vsi.bmiHeader.biHeight= 288;
      DSStream_DisconnectPin(nCardID, PREVIEW);
      rc=!DSStream_SetVideoInfo(nCardID, Vsi, PREVIEW);
      DSStream_ConnectPin(nCardID, PREVIEW);
    }
   return(rc);
 }

//获取标题
char *GetImagerTitle(void)
{
 static char pszTitle[]="图像检测";
 return(pszTitle);
}

//获取当前图像
void *SDK2000_GetCurrentDib(void)
{
 int nCardID;
 long nSize;
 void * pszBuf;

 nSize=0; pszBuf=NULL;
 if(DSStream_GetCurrentDib!=NULL)
  {
   nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
   DSStream_GetCurrentDib(nCardID,NULL,&nSize);
   pszBuf=(void *)GlobalAlloc(GPTR,nSize);
   if(pszBuf!=NULL)
   DSStream_GetCurrentDib(nCardID,(BYTE *)pszBuf,&nSize);
  }
 return(pszBuf);
}
//释放一个图像
void SDK2000_FreeOneDib(void *pszBuf)
{
  if(pszBuf!=NULL) GlobalFree(pszBuf);
}
//继续图像流
int SDK2000_ContinueStream(void)
 {
  int nCardID;
  int rc;
  RECT rt;

  rc=-1;
  nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
  if(DSStream_GetStreamStatus!=NULL)
     DSStream_GetStreamStatus(nCardID,&rc);
  if(DSStream_SetStreamStatus!=NULL){
    GetClientRect(hWndImage,&rt);
 	   DSStream_SetWindowPos(nCardID,rt);
    DSStream_SetStreamStatus(nCardID,RUN);
   }
  return(rc);
 }
//停止图像流
int SDK2000_StopStream(void)
 {
  int rc;
  int nCardID;
  RECT rt;

  rc=-1;
  nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
  if(DSStream_GetStreamStatus!=NULL)
     DSStream_GetStreamStatus(nCardID,&rc);

  if(DSStream_SetStreamStatus!=NULL){
    ZeroMemory(&rt,sizeof(rt));
    DSStream_SetStreamStatus(nCardID,STOP);
 	  DSStream_SetWindowPos(nCardID,rt);
   }
  return(rc);
 }
//暂停图像流
int SDK2000_PauseStream(void)
 {
  int rc;
  int nCardID;

  rc=-1;
  nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
  if(DSStream_GetStreamStatus!=NULL)
     DSStream_GetStreamStatus(nCardID,&rc);
  if(DSStream_SetStreamStatus!=NULL)
     DSStream_SetStreamStatus(nCardID,PAUSE);
  return(rc);
 }

//设置视频源(1:AV1 2:AV2 0:SVHS)
int SDK2000_SetInPin(int nChan)
 {
  int n;
  int nCardID;

  n = SDK2000_GetInPin();
  if(DSStream_RouteInPinToOutPin!=NULL){
    nCardID=SDK2000_GetCurCard();
    DSStream_RouteInPinToOutPin(nCardID,nChan,0);
   }
  return(n);
 }
//获取视频源(1:AV1 2:AV2 0:SVHS)
int SDK2000_GetInPin(void)
 {
  long n;
  int nCardID;

  n=0;
  if(DSStream_WhatInPinRouteToOutPin!=NULL){
    nCardID=SDK2000_GetCurCard();
    DSStream_WhatInPinRouteToOutPin(nCardID,0,&n);
   }
  return(n);
 }
//获取设置当前图象卡
int SDK2000_GetSetCurCard(int nID)
 {
  static BYTE nImagerID=0;
  int n;

  n=nImagerID;
  if(nID>=0)nImagerID=(BYTE)nID;
  return(n);
 }

//释放图像卡
void SDK2000_UnInit(void)
{
 void *pFun;
 int nCardID;

 if(hModuleDll==NULL)return;

 nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
	//DSStream_DisconnectDevice(nImagerID);
 pFun=GetOneProcOnDll("DSStream_DisconnectDevice");
 if(pFun!=NULL)
 	((tdDSStream_DisconnectDevice)pFun)(nCardID);

 // DSStream_Uninitialize();
 pFun=GetOneProcOnDll("DSStream_Uninitialize");
 if(pFun!=NULL)((tdDSStream_Uninitialize)pFun)();

 FreeLibrary(hModuleDll);
 ResetSomeProcess();

 hModuleDll=NULL;
 }
//初始化图象卡
int SDK2000_Init(HWND hParent,HWND hImage)
{
  static char pszText[]="图像卡初始化失败!\n\n可能图像卡不存在或已损坏!";
  int rc;

  if(hModuleDll!=NULL)return(TRUE);

  rc = InitSDK2000DLL();
  if(rc)rc=InitOneCard(hParent,hImage);
  if(rc)rc=SetOneCardParam();

  if(rc==FALSE){
    MessageBeep(MB_ICONHAND);
    MessageBox(hParent,pszText,GetImagerTitle(),
    MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
   }
  return(rc);
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -