ホームページ > バックエンド開発 > C++ > C# でマウスの位置から画像を正しくズームおよび変換する方法は?

C# でマウスの位置から画像を正しくズームおよび変換する方法は?

Susan Sarandon
リリース: 2024-12-27 06:37:09
オリジナル
144 人が閲覧しました

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 コントロールに 4 つのズーム モードを実装しています。

  • ImageLocation: 画像は、画像上の現在の位置を維持しながら、所定の位置に拡大縮小されます。 Canvas.
  • CenterCanvas: 画像は拡大縮小中にキャンバス上の中心位置を保持します。
  • CenterMouse: 画像は拡大縮小され、画像自体が中央に移動します。マウスポインタの現在位置Canvas.
  • MouseOffset: 画像上の最初のマウス ポインターの位置によって決定される相対位置を維持するために、画像は拡大縮小および移動されます。

コード:

回答で提供されているコードは、PictureBox から継承し、カスタマイズされた機能を含む PictureBoxEx カスタム コントロールを導入しています。また、初期化中にフォームに追加されたカスタム コントロールを表す Canvas 変数も含まれます。 ZoomMode 列挙型は、さまざまなズーム モードを定義するために使用されます。

マウス イベントとトラック バーのイベント ハンドラー、およびコア ペイント ロジックは、選択されたズーム モードに基づいてズームと回転の操作を処理します。

実行する前に、imagePath 文字列を画像ファイルの実際のパスに変更することを忘れないでください。 code.

利点:

このアプローチは、マウスの位置から画像をズームおよび移動するためのより効率的かつ安定した方法を提供します。これにより、複雑な変換を処理するときに予期しない視覚的なアーティファクトやパフォーマンスの問題が発生する可能性が軽減されます。

以上がC# でマウスの位置から画像を正しくズームおよび変換する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート