中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

怎么在C#中使用picturebox控件實現圖像拖拽和縮放

怎么在C#中使用picturebox控件實現圖像拖拽和縮放?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

創新互聯建站是一家專業提供綏寧企業網站建設,專注與網站建設、成都網站制作、H5網站設計、小程序制作等業務。10年已為綏寧眾多企業、政府機構等服務。創新互聯專業網站設計公司優惠進行中。

1.核心步驟:

①新建Point類型全局變量mouseDownPoint,記錄拖拽過程中鼠標位置;

②MouseDown事件記錄Cursor位置;

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

代碼:

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(); //鼠標滾輪事件(縮放時)需要picturebox有焦點
   }
  }

  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(); //鼠標在picturebox上時才有焦點,此時可以縮放
   if (isMove)
   {
    int x, y;   //新的pictureBox1.Location(x,y)
    int moveX, moveY; //X方向,Y方向移動大小。
    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 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(); //鼠標不在picturebox上時焦點給別的控件,此時無法縮放   
   if (isMove)
   {
    int x, y;   //新的pictureBox1.Location(x,y)
    int moveX, moveY; //X方向,Y方向移動大小。
    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;
   }
  }

2.圖像縮放

核心思想:利用picturebox的zoom模式,根據圖像顯示大小更改picturebox大小,記錄鼠標位置補償縮放位移,實現錨點縮放,即以鼠標位置為中心進行縮放。
zoomstep --- 自己定義滾輪滑動縮放大小

代碼:

//實現錨點縮放(以鼠標所指位置為中心縮放);
  //步驟:
  //①先改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)。
  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);
}

看完上述內容,你們掌握怎么在C#中使用picturebox控件實現圖像拖拽和縮放的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!

文章題目:怎么在C#中使用picturebox控件實現圖像拖拽和縮放
標題來源:http://www.2m8n56k.cn/article34/jdsgse.html

成都網站建設公司_創新互聯,為您提供服務器托管、商城網站、手機網站建設、移動網站建設、網站導航、靜態網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設
主站蜘蛛池模板: 免费特黄视频 | 日韩免费一区二区三区在线 | 国产伦久视频免费观看视频 | 草久久久| 国产成人理在线观看视频 | 怡红院在线视频全部观看 | 日本一本黄 | 亚洲精品综合一区二区 | 毛茸茸年轻成熟亚洲人 | 美女在线看永久免费网址 | 精品国产一区二区三区免费看 | 亚洲成人一区在线 | 成人国产精品一级毛片天堂 | 亚洲福利精品一区二区三区 | 污到下面流水的视频 | 黄a视频在线观看 | 最新主播福利视频在线观看 | 欧美高清色视频在线播放 | 亚洲欧美日韩久久一区 | 一级毛片私人影院老司机 | 各种偷拍盗摄视频在线观看 | 欧洲老妇bbbbbxxxxx| 精品免费视频 | 免费国产一区二区在免费观看 | 欧美成人www在线观看网页 | 色综合美国色农夫网 | 有码 在线| 久久久91精品国产一区二区 | 性生大片一级毛片免费观看 | 久久久午夜精品理论片 | 日本大臿亚洲香蕉大片 | 亚洲在线视频免费观看 | 99视频免费在线观看 | 日韩三级精品 | 在线免费观看亚洲视频 | 成人18免费网站在线观看 | 国产一级一级一级成人毛片 | 亚洲日本久久一区二区va | 亚洲国产成人久久综合一区 | 日韩aⅴ在线观看 | 久久这里只有精品免费视频 |