2.2.2 C#中显示控件BDPictureBox 的实现----DisplayContext说明续
1 主要目标描述
实现图片缩放信息和中心点位置偏移信息的管理,外部调用者只要输入放大,缩小,位置偏移,其他全部由displayContext 实现
2 公共的函数部分,供界面部分调用
- Init_Display_Info():首次使用或者 ,图片尺寸改变时使用,
- update_display_img():获取当前状态下局部显示图像和坐标系转移矩阵
- update_display_hom2d(): 更新当前状态下坐标系转移矩阵,用于后续显示polygen或者contours使用
- update_Scroll_Info_after_scroll(): 滚动条拖动后更新scale和scroll信息
- update_Scroll_Info_after_pan(): 鼠标拖动后更新信息
- enlarge(): 图像放大一定的系数
- ensmall(): 图像缩小一定的系数
- fit(): 图像回复的初始全部显示状态
2.1 Init_Display_Info():首次使用或者 ,图片尺寸改变时使用
/// <summary>
/// Init_Display_Info/// 首次使用或者 ,图片尺寸改变时使用/// </summary>/// <param name="src_size"></param>/// <param name="picturebox_rect"></param>/// <param name="_hScr0"></param>/// <param name="_vScr0"></param>public void Init_Display_Info(OpenCvSharp.Size src_size, OpenCvSharp.Size picturebox_rect, BDControlls.Scroll.Hscroll _hScr0, BDControlls.Scroll.Vsroll _vScr0){// 原始尺寸数据scale_info.m_nImageWidth = src_size.Width;scale_info.m_nImageHeight = src_size.Height;scale_info.pictureboxSize.Width = picturebox_rect.Width;scale_info.pictureboxSize.Height = picturebox_rect.Height;// 控件尺寸数据scale_info.m_nScale_init = (float)get_display_init_zoom_rate(scale_info.pictureboxSize, src_size, ref scale_info.init_surfacesize);scale_info.update(1);scroll_info.Init_Scroll(_hScr0, _vScr0, ref scale_info);}
2.2 update_display_img():获取当前状态下局部显示图像和坐标系转移矩阵
/// <summary>
/// update_display_img
/// 更新 displayimg and hom2d
/// </summary>
/// <param name="src"></param>
/// <param name="hom2d"></param>
/// <param name="extract_img"></param>
/// <returns></returns>
public int update_display_img(Mat src,ref Mat hom2d ,ref Mat extract_img)
{int nRet = 0;nRet= update_display_img(src,ref extract_img, ref hom2d, scale_info.pictureboxSize, scale_info.init_surfacesize, scale_info.m_nScale_init, scale_info.zoom_cur, scroll_info.get_offset());return nRet;
}
2.3 update_display_hom2d(): 更新当前状态下坐标系转移矩阵
/// <summary>
/// update_display_hom2d
/// </summary>
/// <param name="hom2d"></param>
/// <returns></returns>
public int update_display_hom2d(ref Mat hom2d)
{int nRet = 0;nRet= update_display_hom2d(ref hom2d, new OpenCvSharp.Size(scale_info.m_nImageWidth, scale_info.m_nImageHeight), scale_info.pictureboxSize, scale_info.init_surfacesize, scale_info.m_nScale_init, scale_info.zoom_cur, scroll_info.get_offset());return nRet;
}
2.4 update_Scroll_Info_after_scroll(): 滚动条拖动后更新scale和scroll信息
public void update_Scroll_Info_after_scroll()
{scroll_info.update_Scroll_Info_after_scroll(ref scale_info);
}
2.5 update_Scroll_Info_after_pan(): 鼠标拖动后更新信息
public void update_Scroll_Info_after_pan(OpenCvSharp.Point m_pDist_mouse)
{scroll_info.update_Scroll_Info_after_pan(m_pDist_mouse,ref scale_info);
}
2.6 enlarge(): 图像放大一定的系数
public void enlarge(float zoom_rate){scale_info.enlarge(zoom_rate);scroll_info.update_Scroll_Info_after_zoom(ref scale_info);}
2.7 ensmall(): 图像缩小一定的系数
public void ensmall(float zoom_rate)
{scale_info.ensmall(zoom_rate);scroll_info.update_Scroll_Info_after_zoom(ref scale_info);
}
2.8 fit(): 图像回复的初始全部显示状态
public void fit()
{scale_info.update(1);scroll_info.reset_Scroll_Info();
}
3 创建一个DispManager类,实现DisplayContext类的自动创建
只要使用DispManager.get_DispCTX()就可以自动创建displayContext 类,实现即用即创建
/// <summary>
/// Manager
/// </summary>
public class DispManager
{ private static displayContext display_CTX;public static displayContext get_DispCTX(){if (display_CTX == null) display_CTX = new displayContext();return display_CTX;} }