激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - WinForm實現(xiàn)的圖片拖拽與縮放功能示例

WinForm實現(xiàn)的圖片拖拽與縮放功能示例

2022-01-05 13:20何問起 C#

這篇文章主要介紹了WinForm實現(xiàn)的圖片拖拽與縮放功能,結合具體實例形式分析了WinForm鼠標事件響應及圖片元素動態(tài)操作相關實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了WinForm實現(xiàn)的圖片拖拽與縮放功能。分享給大家供大家參考,具體如下:

最近做項目的時候遇到上傳施工平面布置圖,查看,因為圖片比較大,一般的顯示器分辨率無法顯示全,然后還需要放大看清楚圖片里面的文字內(nèi)容,所以需要用到圖片的拖拽與縮放功能。這里整理下具體操作。

首先新建一個窗體,拖一個panel控件到窗體中,然后在拖一個pictureobx控件到panel中,然后在添加個上傳圖片的按鈕:

WinForm實現(xiàn)的圖片拖拽與縮放功能示例

具體代碼:

?
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Reflection;
namespace 圖像平移縮放
{
  public partial class Form1 : Form
  {
    Bitmap myBmp;
    Point mouseDownPoint = new Point(); //記錄拖拽過程鼠標位置
    bool isMove = false//判斷鼠標在picturebox上移動時,是否處于拖拽過程(鼠標左鍵是否按下)
    int zoomStep = 20;   //縮放步長
    public Form1()
    {
      InitializeComponent();
    }
    //圖片上傳
    private void button1_Click(object sender, EventArgs e)
    {
      string filename = "";
      OpenFileDialog dlg = new OpenFileDialog();
      dlg.Filter = "Tiff文件|*.tif|Bmp文件|*.bmp|Erdas img文件|*.img|EVNI文件|*.hdr|jpeg文件|*.jpg|raw文件|*.raw|vrt文件|*.vrt|所有文件|*.*";
      dlg.FilterIndex = 8;
      if (dlg.ShowDialog() == DialogResult.OK)
      {
        filename = dlg.FileName;
      }
      if (filename == "")
      {
        return;
      }
      myBmp = new Bitmap(filename);
      if (myBmp == null)
      {
        MessageBox.Show("讀取失敗");
        return;
      }
      textBox1.Text = filename;
      pictureBox1.Image = myBmp;
      pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; //設置picturebox為縮放模式
      pictureBox1.Width = myBmp.Width;
      pictureBox1.Height = myBmp.Height;
    }
    //鼠標按下功能
    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
      if (e.Button == MouseButtons.Left)
      {
        mouseDownPoint.X = Cursor.Position.X;
        mouseDownPoint.Y = Cursor.Position.Y;
        isMove = true;
        pictureBox1.Focus();
      }
    }
    //鼠標松開功能
    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
      if (e.Button == MouseButtons.Left)
      {
        isMove = false;
      }
    }
    //鼠標移動功能
    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
      pictureBox1.Focus();
      if (isMove)
      {
        int x, y;
        int moveX, moveY;
        moveX = Cursor.Position.X - mouseDownPoint.X;
        moveY = Cursor.Position.Y - mouseDownPoint.Y;
        x = pictureBox1.Location.X + moveX;
        y = pictureBox1.Location.Y + moveY;
        pictureBox1.Location = new Point(x, y);
        mouseDownPoint.X = Cursor.Position.X;
        mouseDownPoint.Y = Cursor.Position.Y;
      }
    }
    //鼠標滾輪滾動功能
    private void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
    {
      int x = e.Location.X;
      int y = e.Location.Y;
      int ow = pictureBox1.Width;
      int oh = pictureBox1.Height;
      int VX, VY;
      if (e.Delta > 0)
      {
        pictureBox1.Width += zoomStep;
        pictureBox1.Height += zoomStep;
        PropertyInfo pInfo = pictureBox1.GetType().GetProperty("ImageRectangle", BindingFlags.Instance |
          BindingFlags.NonPublic);
        Rectangle rect = (Rectangle)pInfo.GetValue(pictureBox1, null);
        pictureBox1.Width = rect.Width;
        pictureBox1.Height = rect.Height;
      }
      if (e.Delta < 0)
      {
        if (pictureBox1.Width < myBmp.Width / 10)
          return;
        pictureBox1.Width -= zoomStep;
        pictureBox1.Height -= zoomStep;
        PropertyInfo pInfo = pictureBox1.GetType().GetProperty("ImageRectangle", BindingFlags.Instance |
          BindingFlags.NonPublic);
        Rectangle rect = (Rectangle)pInfo.GetValue(pictureBox1, null);
        pictureBox1.Width = rect.Width;
        pictureBox1.Height = rect.Height;
      }
      VX = (int)((double)x * (ow - pictureBox1.Width) / ow);
      VY = (int)((double)y * (oh - pictureBox1.Height) / oh);
      pictureBox1.Location = new Point(pictureBox1.Location.X + VX, pictureBox1.Location.Y + VY);
    }
    private void panel2_MouseDown(object sender, MouseEventArgs e)
    {
      if (e.Button == MouseButtons.Left)
      {
        mouseDownPoint.X = Cursor.Position.X;
        mouseDownPoint.Y = Cursor.Position.Y;
        isMove = true;
      }
    }
    private void panel2_MouseUp(object sender, MouseEventArgs e)
    {
      if (e.Button == MouseButtons.Left)
      {
        isMove = false;
      }
    }
    private void panel2_MouseMove(object sender, MouseEventArgs e)
    {
      panel2.Focus();
      if (isMove)
      {
        int x, y;
        int moveX, moveY;
        moveX = Cursor.Position.X - mouseDownPoint.X;
        moveY = Cursor.Position.Y - mouseDownPoint.Y;
        x = pictureBox1.Location.X + moveX;
        y = pictureBox1.Location.Y + moveY;
        pictureBox1.Location = new Point(x, y);
        mouseDownPoint.X = Cursor.Position.X;
        mouseDownPoint.Y = Cursor.Position.Y;
      }
    }
  }
}

這里需要注意一點,類里面用到了一個 pictureBox1_MouseWheel 時間,這個是picturebox控件沒有的時間,所以需要手動去添加這個事件,可以直接在form1的設計類中添加

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//
// pictureBox1
//
this.pictureBox1.BackColor = System.Drawing.Color.White;
this.pictureBox1.Location = new System.Drawing.Point(20, 20);
this.pictureBox1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(67, 34);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
this.pictureBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDown);
this.pictureBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseMove);
this.pictureBox1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseUp);
this.pictureBox1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseWheel);

這樣就能直接運行成功了

希望本文所述對大家C#程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久国产精品久久久久久 | 一级毛片免费的 | 草草在线视频 | 免费久久精品 | 青青草好吊色 | 国产精品一区二区三区在线播放 | 一区免费| 免费国产一级特黄久久 | 在线播放亚洲 | 一级成人欧美一区在线观看 | 亚洲第一激情 | 精品久久久91| 天天草夜夜 | 婷婷亚洲一区二区三区 | 最近免费中文字幕在线视频2 | 久久av喷吹av高潮av懂色 | 欧美性受xxx黑人xyx性爽 | 亚洲第一页视频 | 毛片免费网 | 在线播放免费播放av片 | 91网站免费观看 | 鲁丝片一区二区三区免费入口 | 欧美性精品videofree | 亚洲综合视频网站 | 欧美日韩高清一区 | 亚洲成人免费视频在线 | 亚洲成人网一区 | 黄色高清视频网站 | 久久久久av69精品 | 无码专区aaaaaa免费视频 | 亚洲天堂在线电影 | a视频在线免费观看 | 看免费一级毛片 | 欧美日韩国产成人在线 | 亚洲一区二区在线视频 | 一区二区三区在线播放视频 | 国产精品午夜小视频观看 | 91av日韩 | 麻豆小视频在线观看 | 国内精品久久久久影院不卡 | 欧美成人精品一区二区男人小说 |