C# winfrom縮放圖片並且可以滑鼠拖動
阿新 • • 發佈:2019-02-16
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
}
}