1. 程式人生 > >C# winfrom縮放圖片並且可以滑鼠拖動

C# winfrom縮放圖片並且可以滑鼠拖動

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Reflection; namespace Medical.PEIS.UI.BusinessUI {     public partial class TuPianYL : Form     {         Bitmap myBmp;         Point mouseDownPoint = new Point(); //記錄拖拽過程滑鼠位置         bool isMove = false;  //判斷滑鼠在picturebox上移動時,是否處於拖拽過程(滑鼠左鍵是否按下)         int zoomStep = 60;   //縮放步長         public TuPianYL()         {             InitializeComponent();         }         #region 圖片載入(第一種方式)         public TuPianYL(string TP, bool FTP)         {             InitializeComponent();             if (FTP == true)             {                 pictureBox1.LoadAsync(TP);             }             else             {                 pictureBox1.Load(TP);             }             myBmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);             pictureBox1.Image = myBmp;             pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; //設定picturebox為縮放模式         }          #endregion         #region 圖片載入(第二種方式)         //圖片上傳         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;             }             pictureBox1.Image = myBmp;             pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; //設定picturebox為縮放模式             pictureBox1.Width = myBmp.Width;             pictureBox1.Height = myBmp.Height;         }         #endregion         #region 滑鼠滾輪滾動功能         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);         }         #endregion         #region 滑鼠按下功能    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();           }         }     #endregion         #region 滑鼠鬆開功能         private void pictureBox1_MouseUp(object sender, MouseEventArgs e)         {             if (e.Button == MouseButtons.Left)             {                 isMove = false;             }         }     #endregion         #region 滑鼠移動功能         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;             }         }     #endregion         #region 面板按下功能         private void panel1_MouseDown(object sender, MouseEventArgs e)         {             if (e.Button == MouseButtons.Left)             {                 mouseDownPoint.X = Cursor.Position.X;                 mouseDownPoint.Y = Cursor.Position.Y;                 isMove = true;             }         }     #endregion         #region 面板鬆開功能         private void panel1_MouseUp(object sender, MouseEventArgs e)         {             if (e.Button == MouseButtons.Left)             {                   isMove = false;             }         }     #endregion         #region 面板移動功能         private void panel1_MouseMove(object sender, MouseEventArgs e)         {             panel1.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;             }         }     #endregion   } }