IDC_picture控件添加一个圆,圆中又添加一个十字准星
IDC_picture控件添加一个圆,圆中再添加一个十字准星
如题要求:IDC_picture控件添加一个圆,圆中再添加一个十字准星,之后再显示相机传过来的视频数据,准星一直在控件中保持存在。
------解决方案--------------------
这个用双缓冲,不要用控件
void OnPaint()
{
CPaintDC dc(this);
第一步、 创建内存DC: xDC;
第二步、在xDC上绘采集来的图片数据
第三步、将xDC BitBlt到dc上对应的CRect内
第四步、在dc对应的CRect上画圆和准心
}
------解决方案--------------------
办法3,有缺点,就是你移动窗口后,你要把透明窗体跟着移动到位才行
最好的办法,是在采集回调时,刷新完界面显示图像后,在显示图像的dc上面画
------解决方案--------------------
------解决方案--------------------
CDC::Ellipse画椭圆
这个函数就是在一个矩形内,画椭圆,如果椭圆是个正方形,就是个圆了
具体函数参数,你自己查,如果你对GDI+比较熟,可能会有更好的操作。
我的代码是让一个对话框变透明,怎么让图像控件变透明,我还没试过,如果行,到解决了方法3的缺点,主窗口移动时候,不需要透明对话框跟着移动了。
画图的时候,你得先获得控件或窗口的DC,然后画图,计算控件区域中心,以这个中心为圆点,构造一个正方形区域,使用上面说的函数就能画了
------解决方案--------------------
相机拍的视频,如果你用QQ摄像头,用的是VFW或dshow包,有函数直接调用,画在控件上面,如果你用比较好的工业相机,也有相关函数指定显示的控件,它就自己显示了,有的工业相机没有这个函数,会给你个采集回调函数的定义,你自己做这个回调函数,先根据采集回来的图像数据,在控件上显示图像,然后再控件上画圆。
如果是图片,就是先画图再画圆,防止闪烁和刷新问题,建议用双缓冲方式画图。
具体画图和显示图像函数,自己百度查GDI或GDI+吧
如题要求:IDC_picture控件添加一个圆,圆中再添加一个十字准星,之后再显示相机传过来的视频数据,准星一直在控件中保持存在。
------解决方案--------------------
这个用双缓冲,不要用控件
void OnPaint()
{
CPaintDC dc(this);
第一步、 创建内存DC: xDC;
第二步、在xDC上绘采集来的图片数据
第三步、将xDC BitBlt到dc上对应的CRect内
第四步、在dc对应的CRect上画圆和准心
}
------解决方案--------------------
办法3,有缺点,就是你移动窗口后,你要把透明窗体跟着移动到位才行
最好的办法,是在采集回调时,刷新完界面显示图像后,在显示图像的dc上面画
------解决方案--------------------
COLORREF maskColor = RGB(255,255,255);
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst=LoadLibrary(_T("User32.DLL"));
if(hInst)
{
typedef BOOL (WINAPI * MYFUNC)(HWND , COLORREF,BYTE,DWORD);
MYFUNC fun=NULL;
fun=(MYFUNC)GetProcAddress(hInst,"SetLayeredWindowAttributes");
if(fun)fun(this->GetSafeHwnd(),maskColor,255,1);
FreeLibrary(hInst);
}
------解决方案--------------------
CDC::Ellipse画椭圆
这个函数就是在一个矩形内,画椭圆,如果椭圆是个正方形,就是个圆了
具体函数参数,你自己查,如果你对GDI+比较熟,可能会有更好的操作。
我的代码是让一个对话框变透明,怎么让图像控件变透明,我还没试过,如果行,到解决了方法3的缺点,主窗口移动时候,不需要透明对话框跟着移动了。
画图的时候,你得先获得控件或窗口的DC,然后画图,计算控件区域中心,以这个中心为圆点,构造一个正方形区域,使用上面说的函数就能画了
------解决方案--------------------
相机拍的视频,如果你用QQ摄像头,用的是VFW或dshow包,有函数直接调用,画在控件上面,如果你用比较好的工业相机,也有相关函数指定显示的控件,它就自己显示了,有的工业相机没有这个函数,会给你个采集回调函数的定义,你自己做这个回调函数,先根据采集回来的图像数据,在控件上显示图像,然后再控件上画圆。
如果是图片,就是先画图再画圆,防止闪烁和刷新问题,建议用双缓冲方式画图。
具体画图和显示图像函数,自己百度查GDI或GDI+吧