首页 > 后端开发 > C++ > 如何在 C# 中从鼠标位置正确缩放和平移图像?

如何在 C# 中从鼠标位置正确缩放和平移图像?

Susan Sarandon
发布: 2024-12-27 06:37:09
原创
179 人浏览过

How to Correctly Zoom and Translate an Image from the Mouse Location in C#?

从鼠标位置缩放和平移图像

本文解决了使用 Paint 事件中的变换从鼠标位置缩放(缩放)图像的问题。将位图原点平移到鼠标位置后,图像会缩放并将其原点平移回来。然而,在鼠标位置转换过程中,图像会“跳跃”并且无法从重新定位的原点进行缩放。

解决方案:

为了解决此问题,我们实施以下策略:

  1. 分而治之:将图形效果和转换分解为执行特定任务的专门方法。将这些方法设计为在需要时无缝地协同工作。
  2. 保持简单:避免在矩阵运算中累积多个图形转换。使用 Matrix.Multiply 和 Matrix.RotateAt 进行更简单的计算。
  3. 使用正确的工具:使用 PictureBox(或非系统平面标签)作为“画布”而不是面板。 PictureBox 默认提供双缓冲,专为绘图而设计。

为了直观演示,我们的示例代码在自定义 PictureBoxEx 控件中实现了四种缩放模式:

  • ImageLocation: 图像缩放到位,保持其在图像上的当前位置canvas.
  • CenterCanvas:图像在缩放时保持其在画布上的居中位置。
  • CenterMouse:图像缩放并转换为自身中心在鼠标指针的当前位置上canvas.
  • MouseOffset: 图像缩放和平移以保留由图像上的初始鼠标指针位置确定的相对位置。

代码:

答案中提供的代码介绍了PictureBoxEx自定义控件,该控件继承自PictureBox并包含自定义功能。它还包括 canvas 变量,该变量表示在初始化期间添加到表单的自定义控件。 ZoomMode 枚举用于定义不同的缩放模式。

鼠标事件和轨迹栏的事件处理程序以及核心绘画逻辑,根据所选的缩放模式处理缩放和旋转操作。

请记住在运行之前将 imagePath 字符串修改为图像文件的实际路径代码。

优点:

这种方法提供了一种更高效、更稳定的方法来从鼠标位置缩放和平移图像。它减少了处理复杂转换时出现意外视觉伪影或性能问题的可能性。

以上是如何在 C# 中从鼠标位置正确缩放和平移图像?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板