新建一个对话框支持相机操作

新建一个对话框支持相机操作

1.新建mfc应用程序Dialog类 
配置引用头文件  
然后点击菜单中的project->properties弹出Property page窗口。选择Configuration Properties->C/C++->General在Additional Include Directories中填写GalaxyIncludes.h所在目录路径地址(依用户安装目录为准), 
即 ../../inc;%(AdditionalIncludeDirectories)
配置lib文件
选择Configuration Properties->Linker->General在Additional Library Directories中填写GxIAPICPP.lib所在目录路径地址(依用户安装目录为准),即 ../../lib/x64;%(AdditionalLibraryDirectories)
然后选择Configuration Properties->Linker->Input在Additional Dependencies中填写
GxIAPI.lib;DxImageProc.lib;%(AdditionalDependencies)
/* GxIAPI.lib是相机的初始化库文件,通过GxIAPI.h调用 ,DxImageProc.lib猜测是图像处理库文件,通过DxImageProc.h调用  (资料少得可怜人hehehehe) */
2.修改代码初步支持初始化设备
移植过程步骤略微繁琐,我会把最后的工程文件打包上传,在这里仅仅记录重要函数的修改
2.1.在Dlg.h中添加一些宏(用时再添加):
#define  GX_VERIFY(emStatus) \
                        if (emStatus != GX_STATUS_SUCCESS)\
{\
ShowErrorString(emStatus); \
return ;\

#define VERIFY_STATUS_RET(emStatus) \
                              if (emStatus != GX_STATUS_SUCCESS) \
   {\
   return emStatus;\
   }\
更详细介绍参见相机的技术文档《C++软件开发说明书》

..................................................更新于2018.4.3.....................................................

2.2cameraDla类中添加相机初始化和设置参数

2.3添加打开设备按钮 在点击处理函数下移植代码
// TODO: 在此添加控件通知处理程序代码
GX_STATUS     emStatus = GX_STATUS_SUCCESS;
uint32_t      nDevNum  = 0;
GX_OPEN_PARAM stOpenParam;
/* typedef struct GX_OPEN_PARAM 
{
char               *pszContent;        ///< 输入参数内容,不允许为空字符串
GX_OPEN_MODE_CMD   openMode;           ///< 打开方式
GX_ACCESS_MODE_CMD accessMode;         ///< 访问模式
}GX_OPEN_PARAM;
*/
// 初始化打开设备用参数,默认打开序号为1的设备
stOpenParam.accessMode = GX_ACCESS_EXCLUSIVE;
stOpenParam.openMode   = GX_OPEN_INDEX;
stOpenParam.pszContent = "1";
// 枚举设备
emStatus = GXUpdateDeviceList(&nDevNum, 1000);

GX_VERIFY(emStatus);

// 判断当前连接设备个数
if (nDevNum <= 0)
{
MessageBox("未发现设备!");
return;
}

// 如果设备已经打开则关闭,保证相机在初始化出错情况能再次打开
if (m_hDevice != NULL)
{
emStatus = GXCloseDevice(m_hDevice);
GX_VERIFY(emStatus);
m_hDevice = NULL;
}

// 打开设备
emStatus = GXOpenDevice(&stOpenParam, &m_hDevice);
GX_VERIFY(emStatus);
    m_bDevOpened = TRUE;
// 设置相机的默认参数:采集模式:连续采集,数据格式:8-bit
emStatus = InitDevice();
GX_VERIFY(emStatus);
// 获取设备的宽、高等属性信息
    emStatus = GetDeviceParam();
GX_VERIFY(emStatus);
// 获取相机参数,初始化界面控件
InitUI();
// 更新界面控件
UpDateUI();

2.4添加
InitUI();
UpDateUI();
    GetDeviceParam
InitDevice(void);
ShowErrorString
SetPixelFormat8bit
在opendev消息函数中有
emStatus = GXUpdateDeviceList(&nDevNum, 1000);
nDevNum是相机设备个数  一般为1或者2
emStatus 为0说明成功
必须要加的几条语句:
CGxSingleCamMonoDlg::CGxSingleCamMonoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGxSingleCamMonoDlg::IDD, pParent)
, m_bIsSaveImg(FALSE)
, m_bDevOpened(FALSE)
, m_bIsSnap(FALSE)
, m_bTriggerMode(false)
, m_bTriggerActive(false)
, m_bTriggerSource(false)
, m_nImageHeight(0)
, m_nImageWidth(0)
, m_nPayLoadSize(0)
, m_nTriggerMode(0)
, m_hDevice(NULL)
, m_pBmpInfo(NULL)
, m_pBufferRaw(NULL)
, m_pImageBuffer(NULL)
, m_strFilePath("")
, m_pWnd(NULL)
, m_hDC(NULL)
/* 初始化参数不然报错 */

void CcameraDlg::UpDateUI()中
GetDlgItem(ID_OPEN_DEV)->EnableWindow(!m_bDevOpened);  /* 打开设备 要添加*/

2.5 添加采集图像对话题 添加text control
添加消息处理函数:  void CcameraDlg::OnBnClickedShowVideo()
编译出错:添加函数
添加 : UnPrepareForShowImg
   OnFrameCallbackFun
   PrepareForShowImg
   SaveImage

   DrawImg

效果图:

完结

资源页:

https://download.csdn.net/download/zxpcus/10325425


猜你喜欢

转载自blog.csdn.net/zxpcus/article/details/79746876