マウスの位置から画像をズームおよび拡大縮小しようとすると、画像ジャンプして、再配置された原点からのスケールに失敗します。回転、スケール、パンは、マウスの位置に変換しなくても正しく機能します。
マウスの位置から画像をズームおよび変換するには、次の戦略を採用します。
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); }
以上がC# でマウスの位置から画像を正しくズームおよびパンする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。