利用橡皮筋类进行图片区域选取和操作
1、 利用橡皮筋类进行图片区域选取和操作
2、 实现:
1)声明橡皮筋类变量并初始化
将橡皮筋类变量声明为View类的成员变量,并在View类的构造函数中进行初始化。
- class CShowPicture_256View : public CView
- {
- //***
- public:
- /*
- * 橡皮筋
- * 2010-09-25
- */
- CRectTracker m_rectTracker;
- //***
- };
- CShowPicture_256View::CShowPicture_256View()
- {
- // TODO: add construction code here
- /*
- * 初始化橡皮筋
- * 2010-09-25
- */
- m_rectTracker.m_nStyle = CRectTracker::resizeInside | CRectTracker::dottedLine;
- }
注意:m_rectTracker.m_nStyle置为CRectTracker::dottedLine,鼠标释放后线框才会不消失。
2)在OnLButtonDown消息函数中利用橡皮筋类进行区域选择
- void CShowPicture_256View::OnLButtonDown(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
- Invalidate(true); //窗口重绘,使上一次所画的线框消失,这样客户区始终
- //只有一个线框
- //利用橡皮筋类进行区域选择
- CClientDC dc(this);
- m_rectTracker.TrackRubberBand( this, point, TRUE );
- m_rectTracker.Draw( &dc );
- CView::OnLButtonDown(nFlags, point);
- }
3)利用m_rectTracker.m_rect记录的坐标对所选择的区域进行操作
- for(i = m_rectTracker.m_rect.left-10; i < m_rectTracker.m_rect.right-10; i++ )
- for(j = nheigth-(m_rectTracker.m_rect.bottom-10); j < nheigth-(m_rectTracker.m_rect.top-10); j++ )
- {
- tempPos = j*nwidth + i;
- lpbits[tempPos] = 255 - lpbits[tempPos];
- }
这里对所选择区域的图像进行反色。