• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#图像显示实现拖拽、锚点缩放功能[转有耐心的小王]

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.图像拖拽

核心步骤:

①新建Point类型全局变量mouseDownPoint,记录拖拽过程中鼠标位置;

②MouseDown事件记录Cursor位置;

③MouseMove事件计算移动矢量,并更新pictureBox1.Location。

代码:
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
)
{
)
{
//记录鼠标左键按下时位置
;
;
//鼠标滚轮事件(缩放时)需要picturebox有焦点
}
}
 
)
{
)
{
;
}
}
 
)
{
//鼠标在picturebox上时才有焦点,此时可以缩放
)
{
//新的pictureBox1.Location(x,y)
//X方向,Y方向移动大小。
;
;
;
;
);
;
;
}
}
 
)
{
)
{
//记录鼠标左键按下时位置
;
;
}
}
 
)
{
)
{
;
}
}
 
)
{
//鼠标不在picturebox上时焦点给别的控件,此时无法缩放
)
{
//新的pictureBox1.Location(x,y)
//X方向,Y方向移动大小。
;
;
;
;
);
;
;
}
}
 来自CODE的代码片
picmove.cs
 
2.图像缩放
核心思想:利用picturebox的zoom模式,根据图像显示大小更改picturebox大小,记录鼠标位置补偿缩放位移,实现锚点缩放,即以鼠标位置为中心进行缩放。
代码:
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
//实现锚点缩放(以鼠标所指位置为中心缩放);
//步骤:
//①先改picturebox长宽,长宽改变量一样;
//②获取缩放后picturebox中实际显示图像的长宽,这里长宽是不一样的;
//③将picturebox的长宽设置为显示图像的长宽;
//④补偿picturebox因缩放产生的位移,实现锚点缩放。
// 注释:为啥要②③步?由于zoom模式的机制,把picturebox背景设为黑就知道为啥了。
//这里需要获取zoom模式下picturebox所显示图像的大小信息,添加 using System.Reflection;
//pictureBox1_MouseWheel事件没找到。。。手动添加,别忘在Form1.Designer.cs的“Windows 窗体设计器生成的代码”里加入:
//this.pictureBox1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseWheel)。
)
{
;
;
;
;
//因缩放产生的位移矢量
//放大
{
//第①步
;
;
//第②步
|
);
);
//第③步
;
;
}
//缩小
{
//防止一直缩成负值
)
;
 
;
;
|
);
);
;
;
}
//第④步,求因缩放产生的位移,进行补偿,实现锚点缩放的效果
);
);
);
}
 来自CODE的代码片
piczoom.cs
程序下载:

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#获取当前方法的名称空间、类名和方法名称发布时间:2022-07-10
下一篇:
(转)C#彻底关闭窗体发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap