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

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

Susan Sarandon
Susan Sarandon原創
2024-12-27 06:37:09141瀏覽

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

從老鼠位置縮放和平移影像

本文解決了使用 Paint 事件中的變換從滑鼠位置縮放(縮放)影像的問題。將點陣圖原點平移到滑鼠位置後,影像會縮放並將其原點平移回來。然而,在滑鼠位置轉換過程中,影像會「跳躍」並且無法從重新定位的原點進行縮放。

解決方案:

為了解決此問題,我們實施以下策略:

  1. 分而治之:將圖形效果和轉換分解為執行特定任務的專門方法。將這些方法設計為在需要時無縫地協同工作。
  2. 保持簡單:避免在矩陣運算中累積多個圖形轉換。使用 Matrix.Multiply 和 Matrix.RotateAt 進行更簡單的計算。
  3. 使用正確的工具:使用 PictureBox(或非系統平面標籤)作為「畫布」而不是面板。 PictureBox 預設提供雙重緩衝,專為繪圖而設計。

為了直觀演示,我們的範例程式碼在自訂 PictureBoxEx 控制項中實作了四種縮放模式:

  • ImageLocation:影像縮放到位,保持其在影像上的當前位置canvas.
  • CenterCanvas:影像在縮放時保持其在畫布上的居中位置。
  • CenterMouse:影像縮放並轉換為自身中心在滑鼠指標的目前位置上canvas.
  • MouseOffset: 影像縮放和平移由影像上的初始滑鼠指標位置決定的相對位置。

程式碼:

答案中提供的程式碼介紹了PictureBoxEx自訂控件,該控制項繼承自PictureBox並包含自訂功能。它還包括 canvas 變量,該變數表示在初始化期間新增到表單的自訂控制項。 ZoomMode 枚舉用於定義不同的縮放模式。

滑鼠事件和軌跡列的事件處理程序以及核心繪畫邏輯,根據所選的縮放模式處理縮放和旋轉操作。

請記住在運行之前將 imagePath 字串修改為映像檔的實際路徑程式碼。

優點:

這種方法提供了一種更有效率、更穩定的方法來從滑鼠位置縮放和平移影像。它減少了處理複雜轉換時出現意外視覺偽影或性能問題的可能性。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn