假定point为屏幕坐标系中的一点,求取实际图像中的对应点。
1)屏幕坐标系转化为用户坐标系
This->ClientToScreen(&point)点的坐标就转化为用户坐标系中的一个点。举例来说,如果是基于对话框编程,那么用户区就是整个对话框的范围。
2)用户坐标系转化为实际控件坐标系
在基于对话框编程中,为了使得用户界面可视化友好,一般显示图像都会显示在Picture Control控件中,那么转化为控件坐标系中经过两个步骤:
首先获取控件的CWnd,然后调用ClientToScreen(&point),这里已然将用户坐标系当做空间坐标系的屏幕坐标系,那么point转化为实际控件坐标系中的点。
3)实际控件坐标系转化为图像中的点
首先,获取控件的rect, GetDlgItem(IDC_****)->GetClientRect(&rect);
然后,在控件坐标系内按比例转化成为图像坐标系。
x=(int) point.x*1.0*image->width/rect.Width();
y=(int)bpoint.y*1.0*image->height/rect.Height();
反过程可以推出,由图像上的点到屏幕坐标系中点的还原过程。