首頁 > 後端開發 > C++ > 如何在 C# 中從滑鼠位置正確縮放和平移影像?

如何在 C# 中從滑鼠位置正確縮放和平移影像?

DDD
發布: 2024-12-30 20:18:12
原創
586 人瀏覽過

How to Correctly Zoom and Pan an Image from the Mouse Location in C#?

從滑鼠位置縮放和平移圖像

問題描述

嘗試從滑鼠位置縮放和平移圖像時,圖像跳躍並且無法從重新定位的原點進行擴充。旋轉、縮放和平移功能可以正確運行,無需翻譯到滑鼠位置。

實作

為了實現從滑鼠位置縮放和平移影像,我們會採用以下策略:

  • TranslateTransform:將點陣圖翻譯為滑鼠
  • ScaleTransform:根據縮放係數縮放影像。
  • TranslateTransform:將影像平移回原始位置。
  • TranslateTransform:基於平移平移圖像

代碼

private void pnl1_Paint(object sender, PaintEventArgs e)
{
    // Apply rotation angle @ center of bitmap
    e.Graphics.TranslateTransform(img.Width / 2, img.Height / 2);
    e.Graphics.RotateTransform(ang);
    e.Graphics.TranslateTransform(-img.Width / 2, -img.Height / 2);

    // Apply scaling factor - focused @ mouse location
    e.Graphics.TranslateTransform(mouse.X, mouse.Y, MatrixOrder.Append);
    e.Graphics.ScaleTransform(zoom, zoom, MatrixOrder.Append);
    e.Graphics.TranslateTransform(-mouse.X, -mouse.Y, MatrixOrder.Append);

    // Apply drag (pan) location
    e.Graphics.TranslateTransform(imgX, imgY, MatrixOrder.Append);

    // Draw "bmp" @ location
    e.Graphics.DrawImage(img, 0, 0);
}
登入後複製

建議

  • 將轉換分解為專門的方法。
  • 使用自訂 PictureBox使用雙重緩衝(例如, PictureBoxEx)。
  • 利用 Matrix.RotateAt 和 Matrix.Multiply 進行高效率轉換。

以上是如何在 C# 中從滑鼠位置正確縮放和平移影像?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板