MFC中图像显示的问题
在做相机的图像采集程序,用的是黑白的工业相机。
我在多文档程序(MyCamera)中实现了相机的 图像采集,在视类MyCameraView的Ondraw()中调用SDK函数 FD_DrawImage(m_hDraw, (void*)m_pDataBuf, m_cbDataBuf, m_nLeft, m_nTop, m_nWidth, m_nHeight);显示了图像。
其中参数:m_hDraw:绘图对象句柄。
m_pBits:图像数据缓冲区地址。
m_nSize:图像数据缓冲区大小。
m_nLeft:图像在窗体显示时,左上角相对于窗体客户区的横坐标。
m_nTop:图像在窗体显示时,左上角相对于窗体客户区的纵坐标。
m_nPlayWidth:拉伸显示时的宽度。
m_nPlayHeight:拉伸显示时的高度。 为了后续处理的方便,我将图像采集的窗口和图像处理的窗口分开在不同的视图窗口中处理。
也就是说我想在点击某一菜单的时候出现一个新的窗口,并将 点击菜单前 相机采集的图像显示在新开的视图窗口中。因此我新建一 个 CProcessView : public CView。然后在CameraApp中添加多视图的处理,点击的菜单在MainFrame中响应。
问题是我的新窗口和新菜单显示出来了,点击菜单前的相机采集图像在CProcessView中也显示出来,我在MyCameraView中添加了一个CMyCameraView的变量(设为m_processView)并让它指向CMyCameraView的指针,然后在CProcessView中extern m_processView,
在CProcessView的Ondraw函数中
//将m_processView值赋给TempShowPoint ,目的是想以后不跟一直跟着CMyCameraView的指针,
CMyCameraView* TempShowPoint = (CMyCameraView*)m_processView;
//将在m_processView中的图像数据复制出来,目的是想以后的图像数据修改不影响CMyCameraView中的数据。
BYTE* TShowDataBuf = new BYTE[TShowDataSize];
memcpy(TShowDataBuf,TempShowPoint->GetProDataBuf(),TShowDataSize); 问题是 :但是我的目的没有实现,也就是没有让后面处理的数据
不影响原始数据(CMyCameraView中的数据)。 请大家多多的帮忙,很久了也不知道怎么解决这个问题。请多支持!
在做相机的图像采集程序,用的是黑白的工业相机。
我在多文档程序(MyCamera)中实现了相机的 图像采集,在视类MyCameraView的Ondraw()中调用SDK函数 FD_DrawImage(m_hDraw, (void*)m_pDataBuf, m_cbDataBuf, m_nLeft, m_nTop, m_nWidth, m_nHeight);显示了图像。
其中参数:m_hDraw:绘图对象句柄。
m_pBits:图像数据缓冲区地址。
m_nSize:图像数据缓冲区大小。
m_nLeft:图像在窗体显示时,左上角相对于窗体客户区的横坐标。
m_nTop:图像在窗体显示时,左上角相对于窗体客户区的纵坐标。
m_nPlayWidth:拉伸显示时的宽度。
m_nPlayHeight:拉伸显示时的高度。 为了后续处理的方便,我将图像采集的窗口和图像处理的窗口分开在不同的视图窗口中处理。
也就是说我想在点击某一菜单的时候出现一个新的窗口,并将 点击菜单前 相机采集的图像显示在新开的视图窗口中。因此我新建一 个 CProcessView : public CView。然后在CameraApp中添加多视图的处理,点击的菜单在MainFrame中响应。
问题是我的新窗口和新菜单显示出来了,点击菜单前的相机采集图像在CProcessView中也显示出来,我在MyCameraView中添加了一个CMyCameraView的变量(设为m_processView)并让它指向CMyCameraView的指针,然后在CProcessView中extern m_processView,
在CProcessView的Ondraw函数中
//将m_processView值赋给TempShowPoint ,目的是想以后不跟一直跟着CMyCameraView的指针,
CMyCameraView* TempShowPoint = (CMyCameraView*)m_processView;
//将在m_processView中的图像数据复制出来,目的是想以后的图像数据修改不影响CMyCameraView中的数据。
BYTE* TShowDataBuf = new BYTE[TShowDataSize];
memcpy(TShowDataBuf,TempShowPoint->GetProDataBuf(),TShowDataSize); 问题是 :但是我的目的没有实现,也就是没有让后面处理的数据
不影响原始数据(CMyCameraView中的数据)。 请大家多多的帮忙,很久了也不知道怎么解决这个问题。请多支持!
拷贝的时候的数据是通过在新建的类ProcessView中找到原始的类CMyCameraView的窗口指针,然后复制数据的,不知道我写的是不是算复制?但是只要我CMyCameraView的窗口内容改变,ProcessView刷新的话内容也改变,我是想ProcessView在刷新的时候也不改变,所以我复制了数据,但是效果没有达到.......
这里2个View类的指针的获取还是个问题,在CProceView获取CMyCameraView的指针我是通过全局变量,
不知道仁兄可否给我接受一种方法了,如果按仁兄说的我在2个类中的都需要调用相互的指针。
CMyCameraView* TempShowPoint = (CMyCameraView*)m_processView;
你的这句貌似不是拷贝只是把指针给他,而没有拷贝值。我想这句应该改为
CmyCameraView * TempShowPoint = new CMyCameraView( ); //记得不用的时候释放
memcpy( TempShowPoint, m_processView, sizeof( CMyCameraView ) );