visual C++ 调用颜色对话框,鼠标的回调函数
来源:互联网 发布:长春理工大学软件学院 编辑:程序博客网 时间:2024/06/10 04:23
调用颜色对话框
COLORREF color = RGB(255, 0, 0);
void CTCDlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码//COLORREF color = RGB(255, 0, 0); // 颜色对话框的初始颜色为红色 CColorDialog colorDlg(color); // 构造颜色对话框,传入初始颜色值 if (IDOK == colorDlg.DoModal()) // 显示颜色对话框,并判断是否点击了“确定” { color = colorDlg.GetColor(); // 获取颜色对话框中选择的颜色值 // SetDlgItemInt(IDC_COLOR_EDIT, color); // 在Color编辑框中显示所选颜色值 // SetDlgItemInt(IDC_R_EDIT, GetRValue(color)); // 在R编辑框中显示所选颜色的R分量值 // SetDlgItemInt(IDC_G_EDIT, GetGValue(color)); // 在G编辑框中显示所选颜色的G分量值 //SetDlgItemInt(IDC_B_EDIT, GetBValue(color)); // 在B编辑框中显示所选颜色的B分量值 } }
void CTCDlg::OnBnClickedOk2(){// TODO: 在此添加控件通知处理程序代码 color_img0 = cvLoadImage("new.jpg",1);//原图cvShowImage( "image", color_img0 ); color_img = cvCloneImage( color_img0 );//复制 mask = cvCreateImage( cvSize(color_img->width + 2, color_img->height + 2), 8, 1 ); cvNamedWindow( "image", 1 ); cvSetMouseCallback( "image", on_mouse, 0 );/*void cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse, void* param=NULL );window_name 窗口的名字。on_mouse 指定窗口里每次鼠标事件发生的时候,被调用的函数指针。这个函数的原型应该为 void Foo(int event, int x, int y, int flags, void* param);其中event是 CV_EVENT_*变量之一, x和y是鼠标指针在图像坐标系的坐标(不是窗口坐标系),flags是CV_EVENT_FLAG的组合,param是用户定义的传递到cvSetMouseCallback函数调用的参数。param 用户定义的传递到回调函数的参数。*/} void CTCDlg::on_mouse( int event, int x, int y, int flags, void* param )/*flags操作选项. 低位比特包含连通值, 4 (缺省) 或 8, 在函数执行连通过程中确定使用哪种邻域方式。高位比特可以是 0 或下面的开关选项的组合:CV_FLOODFILL_FIXED_RANGE - 如果设置,则考虑当前象素与种子象素之间的差,否则考虑当前象素与其相邻象素的差。(范围是浮点数).CV_FLOODFILL_MASK_ONLY - 如果设置,函数不填充原始图像 (忽略 new_val), 但填充掩模图像 (这种情况下 MASK 必须是非空的).*/{ switch( event ) { case CV_EVENT_LBUTTONDOWN://CV_EVENT_LBUTTONDOWN表示鼠标左键按下的事件 { CvPoint seed = cvPoint(x,y); // CvPoint 表示一个坐标为整数的二维点,是一个包含integer类型成员x和y的简单结构体。// int lo = lo_diff;// int up = up_diff; int flags = 4 + (255 << 8) + CV_FLOODFILL_FIXED_RANGE; int b=GetBValue(color),g=GetGValue(color),r=GetRValue(color); CvConnectedComp comp;/*typedef struct CvConnectedComp { double area; //区域的面积 CvScalar value; //区域颜色的平均值 CvRect rect; //是一个区域的外接矩形 CvSeq * contour; //指向另一个序列的指针 }; */ CvScalar color = CV_RGB( r, g, b ); cvFloodFill( color_img, seed, color, CV_RGB( 20, 20, 20 ),CV_RGB( 20, 20, 20 ), &comp, flags, /*is_mask ? mask :*/ NULL );//从点击的位置把连接到的范围用上面颜色填充 /* void cvFloodFill(IplImage* src,CvPoint seedPoint, //漫水法从点seedPoint开始实行算法CvScalar newVal, //像素点被染色的值CvScalar loDiff = cvScalarAll(0), //下标记--被染色的相邻点减去loDiffCvScalar upDiff = cvScalarAll(0), //上标记--被染色的相邻点加上upDiffCvConnectedComp* comp = NULL, //如果comp不是NULL,那么该CvConnectedComp被设置为被填充区域的统计属性int flags = 4, /*低八位可以被设置为4或者8,这个参数控制着填充算法的连通性,4表示在4个方向考虑连通性(上下左右),*8表示在8个方向考虑连通性(加上4个对角线方向),高八位可以设置CV_FLOODFILL_FIXED_RANGE,或者*CV_FLOODFILL_MASK_ONLY(如果设置只考虑填充MASK),flags的中间比特(8-15位)的值可以设置填充掩码的值*flags = 8 | CV_FLOODFILL_MASK_ONLY | CV_FLOODFILL_FIXED_RANGE | (43<<8)); CvArr* mask = NULL mask参数与其他有mask参数的使用方法一致,不同的是可以是作为该函数的输出值(指定应经被填充的区域)*如果mask非空,那么它必须是一个单通道,8位,像素宽度和高度均比源图像大两个像素的图像*(这是为使内部运算简单快速),cvFloodFill()不会覆盖mask中非0的区域 */ cvShowImage( "image", color_img ); cvSaveImage("final.jpg",color_img); } break; }}
0 0
- visual C++ 调用颜色对话框,鼠标的回调函数
- c++调用c时回调函数的处理
- jna调用c 的dll(包含回调函数)
- 鼠标回调函数的使用
- 对话框回调函数的问题
- C# 调用C/C++回调函数
- 自定义函数或者回调函数中调用对话框对象
- c调用有参回调函数
- 颜色对话框的调用
- c#调用c++的回调函数
- python如何调用C, 如何注册成C的回调函数(python后台程序常用方法)
- python如何调用C, 如何注册成C的回调函数(python后台程序常用方法)
- python-opencv 关于鼠标的回调函数
- C 回调函数
- 【c++】回调函数
- C 回调函数
- C回调函数
- [C] 回调函数
- 在Flex中发布地图 程序报错 SecurityError: Error #2048: 安全沙箱冲突:
- sgi集群管理软件SMC安装步骤整理
- EL表达式 参考手册
- laravel学习笔记1
- Grid(前端)组件带单元格验证功能的CRUD功能扩展
- visual C++ 调用颜色对话框,鼠标的回调函数
- Android 最常用的快速开发工具类
- 让安装在vs2012上的va插件解析cuda6.5源文件
- [ACM] hdu 3549 Flow Problem (最大流模板题)
- 百度面试题-- 两个递增数组,找到二者合并后的第K大数
- Objective-C语言--类别
- jquery如何操作cookie
- uvalive 2088(哈夫曼树)
- stm32的位操作