电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

C#图片缩放平移从功能分析到编码实现

8页
  • 卖家[上传人]:m****
  • 文档编号:74858605
  • 上传时间:2019-01-29
  • 文档格式:DOCX
  • 文档大小:29.88KB
  • / 8 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、C#图片缩放平移从功能分析到编码实现一直都是在看别人的博客,查到想要的,看完后把页面一关就万事大吉了,没啥感觉;直到后来遇到了同样的问题,总想不起来咋弄,关键是还查不到以前看过的,郁闷!现在想想,还是“好记性不如烂笔头”啊,自己弄过的东西总要留下的什么呀,不然你都不知道自己曾经多么优秀。注册博客园也好久了,因为不知道该写点啥,再加上懒,一直没有去管它,今日有空,正好开张!1. 需求说明这个没啥好说的,主要干三个事,用电脑的照片查看器打开一张你宝贝的自拍照。(1)拉动显示窗口,图片按照原有比例被放大和缩小,照片查看器中当图片没能完全显示时,拉框时只是拉框,我们不管这个,只要图片显示窗口变了,那就按照原有比例被放大和缩小。(2)鼠标放在图片的有效区域,鼠标滚轮放大和缩小图片,缩小时最小只能到图片原大小;放大无限制,照片查看器放大也有限制,咱也不管它。(3)鼠标放在图片的有效区域,按住鼠标左键平移图片,平移时只能平移图片有效范围。2. 功能分析想想上面要实现的功能,结合C#,我们用Winform的窗体程序来实现,图片显示用PictureBox控件,它有一个PictureBoxSizeMode

      2、属性,值改成Zoom,这样就能保证PictureBox控件里面的图片随PictureBox控件大小改变而按照原有比例缩放,然后把PictureBox控件放大Form窗体中,dock属性改成Fill填满就可以了,但dock属性改成Fill填满之后,PictureBox控件的大小变得无法改变(我也是试了之后才知道的),一种有效的解决方案是在窗体里面放一个Panel控件,dock属性Fill,然后把PictureBox控件放在Panel中,大小改成和Panel控件一样大,再加一个Panel控件的SizeChanged事件,随时设置PictureBox控件和Panel控件一样大。这里不细说,具体看下面的C#编码实现,咱重点说说PictureBox控件里的图斑如何缩放和平移。要想实现缩放和平移,首先我们得了解它实现的原理,这是下面编码实现的基础。因为图片随PictureBox控件大小改变而按照原有比例缩放,因此我们改变PictureBox控件的大小,也就是它的Width和Height属性,在视觉上就能看到图片被放大和缩小,也就是缩放;当图片被放大后,窗体中不能显示完整的图片内容,这时就需要我们通

      3、过平移来查看未能显示在窗体上的图片部分了,同样的,我们只要改变PictureBox控件的位置,也就是它的Left和Top属性,就能把需要展示的图片局部正好显示在窗体上,从而在视觉上看到图片平移。原理简单说明了一下后,所以,我们想要实现缩放与偏移,本质上就是计算PictureBox控件的大小和位置,只要搞定了这个,缩放平移也就搞定了。那么这个大小和位置咋算呢,请接着往下看。我们知道照片查看器缩放用的鼠标滚轮,前滚放大,后滚缩小。PictureBox控件中找一下,MouseWheel事件正好干这个事。再一查,哎呀,SystemInformation.MouseWheelScrollLines代码滚一格(微软叫它制动器)代表多少行。那就好办了,我们把这个多少行按一定的比例转换成PictureBox控件Left、Top、Width、Height四个属性的增量,加上原值后,调整与显示窗体大小以及图片有效区域的位置关系,重新赋值回去就OK了。平移稍稍麻烦一点,其实也不是太麻烦。涉及到MouseDown、MouseMove、MouseUp三个事件,在鼠标按下时记录下按下点坐标,同时标识正在平移操作;

      4、在鼠标移动时计算移动的距离,换算Left、Top的增量,并与显示窗体大小和图片有效区域做调整,最后赋值会这俩属性;鼠标弹起时结束平移操作标识。3. 编码实现新建一个窗体应用程序,改窗体名称为frmMian,在其内添加一个Panel控件,命名pel;再在Panel控件中添加一个PictureBox控件,命名pboImage,以下为窗体类需要编写的代码:?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314

      5、4145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174public partial class frmMian : Formpublic frmMian()InitializeComponent();this.pel.Dock = System.Windows.Forms.DockStyle.Fill;this.pel.SizeChanged += new System.EventHandler(this.pel_SizeChanged);this.pboImage.Margin = new System.Windows.Forms.Padding(0);this.pboImage.Location = new System.Drawing.Point(0, 0);this.pboImage.Size = new System.Drawing.Size(this.pel.Width, this.pel.Height);this.pboImage.SizeMod

      6、e = System.Windows.Forms.PictureBoxSizeMode.Zoom;this.pboImage.Cursor = Cursors.SizeAll;this.pboImage.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pboImage_MouseDown);this.pboImage.MouseEnter += new System.EventHandler(this.pboImage_MouseEnter);this.pboImage.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pboImage_MouseMove);this.pboImage.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pboImage_MouseUp);this.pboImage.MouseWheel += new System.Windows.Forms.

      7、MouseEventHandler(this.pboImage_MouseWheel);pboImage.Image = Image.FromFile(C:宝贝自拍照.jpg);private System.Drawing.Point MouseDownPoint = new System.Drawing.Point();/平移时鼠标按下的位置private bool IsSelected = false; /鼠标是否是按下状态/pboImage获取焦点事件private void pboImage_MouseEnter(object sender, EventArgs e)pboImage.Focus();/pboImage鼠标滚轮事件private void pboImage_MouseWheel(object sender, MouseEventArgs e)if (pboImage.Image = null) return;/计算缩放后的锚点和宽高int i = e.Delta * SystemInformation.MouseWheelScrollLines / 4;int left = pboImage.Left - i / 2, top = pboImage.Top - i / 2;int width = pboImage.Width + i, heigth = pboImage.Height + i;if (i HeigthScale)top = top + Convert.ToInt32(Math.Ceiling(heigth - (pboImage.Image.Height / WidthScale) / 2;heigth = Convert.ToInt32(Math.Ceiling(pboImage.Image.Height / WidthScale);elseleft = left + Convert.ToInt32(Math.Ceiling(width - (pboImage.Image.Width / HeigthScale)

      《C#图片缩放平移从功能分析到编码实现》由会员m****分享,可在线阅读,更多相关《C#图片缩放平移从功能分析到编码实现》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.