大家都知道,在图像处理软件中,“矩形选择”工具是必不可少的,因为很多图像处理的操作都是以选中部分的图像为处理对象的。
MFC中有CRectTrack类,可以实现橡皮矩形的功能,但是有以下几个缺点:
(1)屏蔽了WM_MOUSEMOVE,WM_LBUTTONUP消息,不好控制,例如实时显示当前矩形区域的宽、高。
(2)这样画出的矩形框是静态的,不能像photoshop那样:矩形4条边都在“流动”。
(3)不美观。
我已经用CRectTrack实现了矩形选择,但是基于以上3点,想自己写个类似的类来实现。
应该有以下的功能要求:
【1】用鼠标动态绘制虚线矩形,鼠标UP后,矩形应呈“动态显示”。
【2】随图像一起,被拖动或者缩放。
【3】矩形应该是“橡皮矩形”,即可以在四个角、四条边上被拖拽缩放。『问题』
对于实现的原理和方法,各位有没有什么高见?请说得详细一些!
◎谢谢◎
MFC中有CRectTrack类,可以实现橡皮矩形的功能,但是有以下几个缺点:
(1)屏蔽了WM_MOUSEMOVE,WM_LBUTTONUP消息,不好控制,例如实时显示当前矩形区域的宽、高。
(2)这样画出的矩形框是静态的,不能像photoshop那样:矩形4条边都在“流动”。
(3)不美观。
我已经用CRectTrack实现了矩形选择,但是基于以上3点,想自己写个类似的类来实现。
应该有以下的功能要求:
【1】用鼠标动态绘制虚线矩形,鼠标UP后,矩形应呈“动态显示”。
【2】随图像一起,被拖动或者缩放。
【3】矩形应该是“橡皮矩形”,即可以在四个角、四条边上被拖拽缩放。『问题』
对于实现的原理和方法,各位有没有什么高见?请说得详细一些!
◎谢谢◎
解决方案 »
- 切换webbrowser兼容模式
- 问一下关于EDIT的一个问题(急)
- 请教VC如何将XML文件插入到数据库中?
- 请问如何利用VC编程来实现对Word程序的菜单进行控制,如灰掉禁用之类的(我知道VBA可以,但不知VC编程如何实现)
- 难题(有分必加):FindWindow(NULL, L"name")怎么找不到程序了!
- 关于VC+access的sql语句格式提问 ADO方法
- 怎样制作不规则形状的按钮
- 字符串问题,帮忙!
- 请问动态连接库dll内是否能显示对话框
- 如何判断一个SOCKET端口是可用的?
- 我想问一下,现在做个代码编辑器,还有市场吗??
- 如何设置toolbar上的某个按钮为选中态(即为下压状态)??切换为别的按钮后又恢复原态?
感觉rect只是一个画图的工具
绘图的信息保存起来,计算完了画出来就好了
好想法
但是怎么做才能弥补我所所说的CRectTracker的下面3个缺点呢?
(1)屏蔽了WM_MOUSEMOVE,WM_LBUTTONUP消息,不好控制,例如实时显示当前矩形区域的宽、高。
(2)这样画出的矩形框是静态的,不能像photoshop那样:矩形4条边都在“流动”。
(3)不美观。
{
//这个函数是绘制拖动时虚线矩形框,并可以移动对象位置功能的
CClientDC dc(this);
OnPrepareDC(&dc);
dc.DrawFocusRect(m_rectTracker);//CRect m_rectTracker;
dc.LPtoDP(m_rectTracker);
CSize sizeTrack = m_rectTracker.Size();
CPoint newTopleft = point - m_dragOffset; // still device
m_rectTracker = CRect(newTopleft, sizeTrack);
m_tracker.m_rect = m_rectTracker;
dc.DPtoLP(m_rectTracker);
dc.DrawFocusRect(m_rectTracker);
}
你上述方法就是自己重新设计一个trackerRect类么?
那怎么让矩形动起来呢?
算了,不说这些了。
能不能给出一个一揽子解决方案呢?
代码来自《COM原理与应用》一书源代码中第9章的范例,它本来的知识点是讲剪贴板和拖、放的方面,不过,例子中的代码恰好有楼主要的功能。需要的话请留下邮箱,我给你发过去。
还是继承来得快一些。
但是我的问题,即对类CRectTracker得控制不完全了解:
【1】类CRectTracker得拖动和缩放,全部在WM_LBUTTONDOWN里面实现,我怎么实时捕获当前矩形得大小(即绘制时和对矩形缩放时)。
【2】像photoshop一样的使矩形“闪烁显示”。只要此二问题解决了,我的目的也就达到了。
你贴的那篇文章我看过,呵呵,不能满足我现在的要求。
因为继承终究摆脱不了CRectTracker类的桎梏。如果要摆脱这些限制,那么将不得不抛弃此类中 的核心功能,而剩余的其他成员函数都比较简单,可以很快实现。
所以,还是自己老老实实的重新写类吧!◎谢谢各位的指点跟启发◎
【1】还不能像photoshop那样,以象素为单位来绘制矩形框。
【2】图像被大幅度的缩放或者拖动时,矩形框位置和大小有变化,这是误差引起的,我想时我的方法,也就是计算位置和尺寸时,参照物不合适。若有做过这方面的工作的高人,能否指点一二。
谢谢!
1。不是按矩形画的否则到任意形状就无法做了。
2。其实是一个边界的mask.就像0.1。
3。生成一个黑白小块相间的图,比如8*8。然后每次移动一个x.y各1。
4。将1的位置用这个特殊图像填充。
5。自己画,系统的mask函数非常慢(检查CPU Usage)具体有大量的优化才可以比较接近PhotoShop的速度。我的还有差距。
你上面的留言比较简略,
能不能通过邮件,咱们详细的谈一下??我的邮件:
[email protected]
谢谢。