C#中使用Graphics可以很方便的绘图,在绘完图后,往往需要对图进行缩放和移动。缩放时,将鼠标当前的位置作为缩放的中心来缩放,看效果图
中心缩放的核心在于计算图形新的原点,请看代码
public partial class Form1 : Form
{
#region 内部变量
private Graphics _g = null;
private Image _imageCache = null;
/// <summary>
/// 单元格的宽(100%)
/// </summary>
private int _cellWidth_px = 100;
/// <summary>
/// 单元格的高(100%)
/// </summary>
private int _cellHeight_px = 100;
private float _zoomOld = 1.0f;
private float _zoom = 1.0f;
private float _zoomMin = 0.1f;
private float _zoomMax = 1000f;
/// <summary>
/// 表格的左上角
/// </summary>
private PointF _gridLeftTop = new PointF(200, 200);
private bool _leftButtonPress = false;
private PointF _mousePosition = new PointF(0, 0);
#endregion
public Form1()
{
InitializeComponent();
//设置Paint参数以便能更好的控制Paint.
SetStyle(ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true);
this.MouseWheel += Form1_MouseWheel; ;
}
private void Form1_MouseWheel(object sender, MouseEventArgs e)
{
var delta = e.Delta;
if (Math.Abs(delta) < 10)
{
return;
}
var mousePosition = new PointF();
mousePosition.X = e.X;
mousePosition.Y = e.Y;
_zoomOld = _zoom;
if (delta < 0)
{
_zoom -= FetchStep(delta);
}
else if (delta > 0)