首先,定义类CDib,并在CPictureTestDoc.h中定义共有变量:
CDib m_dib;//CDib类对象,用于位图文件的读写
然后,在CPictureTestDoc.cpp文件中添加功能函数:PictureRead(),在其中加入代码:
CString strPathName;
strPathName = _T("TestPicture.bmp");
if (m_dib.Read(strPathName) == TRUE)
{
SetModifiedFlag(FALSE); // start off with unmodified
return ;
}
并在CPictureTestView.cpp文件中的OnDraw(CDC* pDC)函数中,加入如下代码:
CPictureTestDoc* pDoc = GetDocument();
CDib *pDib=pDoc->GetPDib();//返回m_dib的指针
CSize sizeFileDib = pDib->GetDimensions();//获取DIB的尺寸
pDib->Draw(pDC, CPoint(0, 0), sizeFileDib); //显示DIB
在OnInitialUpdate()函数中设置滚动窗口:
CDib *pDib=pDoc->GetPDib();//获取DIB的指针
if(pDib!=NULL)
SetScrollSizes(MM_TEXT, pDib->GetDimensions());//根据DIB尺寸设置视窗大小
最后,添加图像采集命令菜单,其响应函数为:
void CPictureTestView::OnTestStart()
{
CPictureTestDoc * pDoc = GetDocument();
pDoc->;pictureGrab ();//抓图
pDoc->;pictureRead();//把图像读入内存
OnInitialUpdate();//设置滚动窗口
}
编译通过后,单击图像采集命令,即可实时获取图像。
图1 图像采集实例
Fig.1 The example of image acquisition
2.4 相机设置
在图像采集时,我们往往需要对相机的参数如图像格式、分辨率、帧频等进行设定,同时,为了获取高品质图像,我们还需要做白平衡调节。当然,这些参数的设定我们可以在相机初始化时由代码实现,但是,在实际应用中,为了达到最佳效果,我们需要多次调试才能达成,如果采用修改代码的方法,调试过程会很麻烦。数码相机一般都有设置菜单,我们要做的就是,通过代码来调用相机的设置菜单,设置好参数后,参数会自动保存并加载。这样,调试的时候会方便很多。创建相机设置菜单命令,其响应函数如下:
void CPictureTestDoc::OnTestCameraset()
{
pgrcamguiToggleSettingsWindowState(
m_guicontext, AfxGetApp()->m_pMainWnd->GetSafeHwnd() );//相机设置对话框
}
图2 相机参数设置界面
Fig.2 Fig. 4.2 Interface for setting the parameter of the camera
3 结 论 本文实现的图像采集系统可通过1394接口对数码机进行格式/模式/帧率的设置,光学参数的设定,采集画面的实时显示,而且能够对摄像机进行自动控制,系统稳定可靠,利用它可以完成一些复杂项目中的实时连续的图像采集过程,如高速公路车辆和车牌的自动识别管理系统、工业生产中的产品外包装检测系统等,具有很大的实用性.