マウスの位置から画像をズームおよび変換する
マウスの位置から画像をズームおよび変換しようとする場合、変換を適用する順序を考慮することが重要です。望ましい結果。この問題を修正するための提案とテクニックをいくつか示します。
-
変換部門: 個別のグラフィックス効果と変換を別々のメソッドに分離します。これにより、プロセスが簡素化され、潜在的なエラーが減少します。
-
行列演算の優先順位付け: 行列変換を蓄積する代わりに、Matrix.RotateAt と Matrix.Multiply を使用します。これは、より効率的で予期せぬ結果が発生する可能性が低いためです。
-
最適化されたキャンバス選択: 非システムフラットラベルである PictureBox をキャンバスとして使用します。ダブルバッファリングをサポートし、描画用に設計されています。
コード内では、次の 4 つのズーム モードが実装されています。
ズーム モード
-
ImageLocation: 画像のスケーリングは、画像上の位置を変更せずに実行されます。 Canvas.
-
CenterCanvas: 画像は拡大縮小中もキャンバスの中央に留まります。
-
CenterMouse: 画像は拡大縮小され、画像に合わせて移動されます。現在のマウス ポインタの位置Canvas.
-
MouseOffset: 画像上のマウスの初期位置に基づいて相対位置を維持するために、画像が拡大縮小および変換されます。
付属のコード サンプル回転変換を生成し、4 つのズーム モードすべての実装を示します。ズーム モードの選択は、ZoomMode という名前の列挙子によって処理されます。
機能の視覚的な概要
サンプル コード
次のコードは提供:
-
canvas: Form に追加されたカスタム PictureBoxEx コントロール (変更および拡張可能)。
-
trkRotationAngle:画像の回転を調整するために使用される TrackBar angle.
-
radZoom_CheckedChanged: ズーム モード選択ラジオ ボタンのイベント ハンドラー。
canvas_Paint メソッドでは、一連のメソッドを使用して描画イメージの拡大縮小と回転が行われます。行列変換。 GetDrawingImageRect メソッドと GetDrawingImageCenterPoint メソッドは、スケーリングされたイメージを描画するための正しい四角形と中心点を計算するために使用されます。特定の順序で変換を適用することで、キャンバス上の位置またはマウスの位置を基準にした位置を維持しながら、画像をズームおよび移動できます。
以上がマウスの位置から画像を正しくズームおよび変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。