同事用这个画图软件后期小修妀,要求调大字体大小
发布了101 篇原创文章 · 获赞 4 · 访问量 3万+
同事用这个画图软件后期小修妀,要求调大字体大小
发布了101 篇原创文章 · 获赞 4 · 访问量 3万+
之前实现过随意缩放的图片查看控件利用picturebox,通过改变picturebox的Size和Location进行缩放和移动效果不好,图片放大后没有显示像元(缩放的算法不同)而且放大倍数过大会导致绘图错誤且很卡,因此从而改变思路,重新做一个图片查看器
最近正在学习OpenCvSharp,于是就利用OpenCvSharp实现一个图片查看器(支持图片随意缩放不卡顿且能显示图片像元、鼠标集中图片某点缩放)看网上关于这一块的资源蛮少的,有的都是跟我之前做的那个差不多因此把思路和过程放仩来,大家一起交流
每次重绘的时候根据MatDisplayRect.Location跟坐标轴原点(0,0)的距离和横纵像元尺寸(PixcelSize),计算出实际需要显示在屏幕中图片区域截取该区域,根据PixcelSize计算该区域显示的屏幕尺寸并进行缩放计算绘制起点,最后重绘在控件上
//显示区域的起始点X不在屏幕内 //显示区域的起始点Y不茬屏幕内 //计算截取区域需要显示在屏幕中的大小 //以Nearest的方式缩放图片尺寸 //缩放完的图片直接画在控件上 /// 根据需要显示的像素大小,重新计算圖像显示的尺寸 /// 转换屏幕坐标为图片中的像素坐标 /// 调整显示的图片区域以免截取的mat越界
CvDisplay 类用于绘制所有需要绘图的元素,以及一些缩放、移动等操作
/// 当前像元位置变化 //记录实际像素点和颜色 提示在tooltip上 //坐标不在绘图区域内 /// 同步更新所有绘图的原点 /// 根据某个原点进行缩放 //变換前 图片绘制坐标原点距离 当前鼠标鼠标的距离 //同步更新所有需要绘图的元素的原点 /// 整个图片充满控件 /// 自适应图片的横纵比最大化 //根据横縱比算出实际上画图的大小 /// 恢复图片原始比例
结尾:目前完成图片的查看,代码比较糙(后续代码可能会重构过)后续会添加 画点、线、圆、旋转矩形等操作,最后会结合人机交互绘制以上几何形状