解决方案 »
- 分享:统计一副24位彩色图像中的实际使用的颜色数 + 问题:如何统计32位带Alpha通道的实际使用颜色呢?
- DShow里面的一个Filter能够同时连接两个下级Filter吗?
- 怎样删除桌面上的图标?我在C:\Documents and Settings\Administrator\桌面 目录下删除文件桌面上还有显示,怎么回事?
- 弱弱的问题,传统网络通信方式是不是也要占用端口
- SDK编程如何设置Dialog中的Edit control的背景色?
- 这样设置树形控件的TVS_EDITLABELS风格,怎么不起作用?
- 请问:如何调用VC库中的类模板。。。
- 线程问题?
- vs2008 怎样更新 ocx接口文件 ?
- vc比较 编辑框中的大小
- CButtonST如何修改字体大小
- 为什么点击“保存”之后修改,然后点“打开”不调用Serialize函数?
消息。
橡皮筋类(CRectTracker)
加载代码:
void C界面5Dlg::OnBnClickedButtonImg()
{
CString m_strPicPath;
CFileDialog dlg(true,_T("*.bmp"),NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,
_T("image file(*.bmp;*.jpg)|*.bmp;*.jpg|All Files(*.*)|*.*|"),NULL);//弹出选择图片对话框
dlg.m_ofn.lpstrTitle=_T("open Image");
if(dlg.DoModal()!=IDOK) return ;
m_strPicPath = dlg.GetPathName();
m_strPicPath.Replace(_T("//"),_T("////"));
TheImage=cvLoadImage((CT2CA)m_strPicPath,1);
if(TheImage!=NULL)
{
ShowImage(TheImage,IDC_SHOWIMG);
}
else
{
MessageBox("所选文件不是图片格式","提示");
}// TODO: 在此添加控件通知处理程序代码
}画矩形框代码:void C界面5Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
int nIn; //定义一个鼠标的点击值;
nIn=m_tracker.HitTest(point); //看看点到了哪了 CRect Prect1; //定义图片的矩形
CRect Trect; //定义橡皮筋框的矩形
CRect Prect; //图片矩形框 GetDlgItem(IDC_SHOWIMG)->GetWindowRect(&Prect1); //得到图片的矩//形大小 ScreenToClient(&Prect1); //将图片框的绝对矩形大小 //判断是否在图片框内,不处理不在图片框内的点击
if (point.x<Prect1.left||point.x>Prect1.right||point.y<Prect1.top||point.y>Prect1.bottom)
return; m_tracker.SetCursor(this,nFlags); //改变鼠标的形状
if(nIn<0) //不在四边形区域内;
{
Invalidate(true);
m_tracker.TrackRubberBand(this,point,false); //不在矩形框内则画橡皮///筋框
GetDlgItem(IDC_SHOWIMG)->GetWindowRect(&Prect); //得到图片框的//矩形
ScreenToClient(&Prect);
Trect=m_tracker.m_rect; //得到画好的橡皮筋框 //调整大小
Trect.top=(Trect.top<Prect.top?Prect.top:Trect.top);
Trect.left=(Trect.left<Prect.left?Prect.left:Trect.left);
Trect.bottom=(Trect.bottom>Prect.bottom?Prect.bottom:Trect.bottom);
Trect.right=(Trect.right>Prect.right?Prect.right:Trect.right); m_tracker.m_rect.SetRect(Trect.left,Trect.top,Trect.right,Trect.bottom); //画出调整好的矩形框 CClientDC dc(this);
m_tracker.Draw(&dc); //画好矩形框 }
else
//在四边形区域内:
{
Invalidate(); //重画界面 CClientDC dc(this);
GetDlgItem(IDC_SHOWIMG)->GetWindowRect(&Prect);
ClipCursor(&Prect); //api函数,将鼠标限制在图片框内 m_tracker.Draw(&dc);
m_tracker.Track(this,point,false); ScreenToClient(&Prect); Trect=m_tracker.m_rect; //得到画好的橡皮筋框 //调整矩形框的位置
if (Trect.top<Prect.top)
{//超出图片框顶部的位置
Trect.bottom=Prect.top-Trect.top+Trect.bottom;
Trect.top=Prect.top;
}
if (Trect.bottom>Prect.bottom)
{//超出底部的位置
Trect.top=Prect.bottom-Trect.bottom+Trect.top;
Trect.bottom=Prect.bottom;
}
if (Trect.right>Prect.right)
{//超出右边
Trect.left=Prect.right-Trect.right+Trect.left;
Trect.right=Prect.right;
}
if (Trect.left<Prect.left)
{//超出左边
Trect.right=Prect.left-Trect.left+Trect.right;
Trect.left=Prect.left;
}
//设置矩形框大小
m_tracker.m_rect.SetRect(Trect.left,Trect.top,Trect.right,Trect.bottom); m_tracker.Draw(&dc);
// Track()是CRectTracker中最富魅力的函数。它时时的改变调用者的m_rect;
ClipCursor(NULL); //释放对鼠标的限制
}
CRect AbsRect;
AbsRect.left=abs(Trect.left-Prect.left);
AbsRect.right=abs(Trect.right-Prect.right);
AbsRect.top=abs(Trect.top-Prect.top);
AbsRect.bottom=abs(Trect.bottom-Prect.bottom);
/*
CRect rect;
GetDlgItem(IDC_SHOWIMG)->GetClientRect(rect);
GetDlgItem(IDC_SHOWIMG)->ClientToScreen(rect);
ClientToScreen(&point); if(rect.PtInRect(point))
{
SetCapture();
m_bCaptured = TRUE; GetDlgItem(IDC_SHOWIMG)->Invalidate(); //消除上一次绘制的矩形
GetDlgItem(IDC_SHOWIMG)->ScreenToClient(&point);
m_endPos = m_startPos = point;
}// TODO: 在此添加消息处理程序代码和/或调用默认值
*/ CDialogEx::OnLButtonDown(nFlags, point);
}
请大神指教!!
Invalidate(); //重画界面
上了,要是把这两句话删除的话,就可以一直显示图片了,但是调整矩形框大小和重新画矩形框时原先的矩形框就不会删除了,就越来越多的矩形框了。
怎样做可以一直显示图片又可以删除上一个矩形框,只保留最后一个矩形框呢?
其中的一部分 就是 橡皮筋类 的 大小。
当用户 停止 橡皮筋类 操作时, 就可以 进行 处理了 , 即 m_tracker.TrackRubberBand(this,point,false);
结束时,
但是在用cvSetImageROI扣取出矩形框中的内容时明显失真了,是图片显示程序有问题吗?我自己写了一个在控件中显示图片的程序,然后调用的,程序如下:
void CJishu::ShowImage(IplImage* img, UINT ID)
{
CDC* pDC=GetDlgItem(ID)->GetDC();
HDC hDC=pDC->GetSafeHdc();
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);
SetRect(rect,rect.left,rect.top,rect.right,rect.bottom);
CvvImage cimg;
cimg.CopyOf(img);
cimg.DrawToHDC(hDC,&rect);
ReleaseDC(pDC);
}
用这个函数显示时,控件有多大,图片就在多大的范围内显示。
请问是哪的问题呢?
GetDlgItem(ID)->GetClientRect(&rect);
SetRect(rect,rect.left,rect.top,rect.right,rect.bottom);不是 rect 要取 橡皮筋类 当前的 rect
工程呢?
工程打包。
不好意思哈,我又传了一份,不知道这样可不可以。
另外我想再问一个问题,在基于对话框的MFC中,怎样把模态对话框中的edit control中输入的内容显示到另一个对话框中static text中呢?谢谢啦。
1. 这个 Edit 要 关联 为 Value(如CString) ,不能是 Control。
2. 模态对话框 关闭 后 这个 edit 值 还在。 通过 dlg.yourEdit 可以 得到。
3. 同理 另一个对话框中static text 也要 是 Value
4. 在另一个对话框 DoModule 前 ,把 youeEdit 给 yourText 。即:
dlg.2.m_text=dlg1.m_Edit;
dlg2.DoModule();
用到 opencv
类名还含汉字!
帮不了你。
Sorry
"PartialBitmap.zip" 0 分
"PartialBitmap.zip" 0 分
http://download.csdn.net/detail/schlafenhamster/4526898
void CPartialBitmapView::OnButtonSave()
{
// TODO: Add your command handler code here
SavePartialBmp(m_Tracker.m_rect.left,m_Tracker.m_rect.top,m_Tracker.m_rect.right,
m_Tracker.m_rect.bottom);
}
http://download.csdn.net/detail/schlafenhamster/4526898
vc6 的