这是我的代码。
我可以缩放图片框,但不能缩放。旋转鼠标滚轮时如何缩放到鼠标点?
变量是:-
private double m_dZoomscale = 1.0; //THIS IS THE ZOOM SCALE TO WHICH EACH OBJECT
//ARE ZOOMED IN THE CANVAS
public static double s_dScrollValue = .01;
//scale factor value for mouse scroll zooming
Run Code Online (Sandbox Code Playgroud)
油漆代码是:-
private void m_Picturebox_Canvas_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.ScaleTransform((float)m_dZoomscale, (float)m_dZoomscale);
}
Run Code Online (Sandbox Code Playgroud)
主要代码是:-
protected override void OnMouseWheel(MouseEventArgs mea)
{
m_Picturebox_Canvas.Focus();
if (m_Picturebox_Canvas.Focused == true)
{
if (mea.Delta > 0)
{
ZoomInScroll();
}
else if (mea.Delta < 0)
{
ZoomOutScroll();
}
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用单个全局矩阵实现关于固定点的缩放。运行时,如果单击控件,它会缩放,但每次单击时测试矩形会进一步向下和向右移动。据我所知,每个转换(到原点、缩放和返回到原始位置)都单独工作正常,但是当我将所有 3 个组合在一起时,我没有得到正确的行为。
缩放代码
单击控件时,代码(应该)转换到原点,按比例放大,然后转换回原始位置。
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
float xPos = e.Location.X - viewMatrix.OffsetX;
float yPos = e.Location.Y - viewMatrix.OffsetY;
Matrix translateOrigin = new Matrix(1, 0, 0, 1, -xPos, -yPos);
Matrix translateBack = new Matrix(1, 0, 0, 1, xPos, yPos);
Matrix scaleMatrix = new Matrix(1.5f, 0, 0, 1.5f, 0, 0);
viewMatrix.Multiply(translateOrigin);
viewMatrix.Multiply(scaleMatrix);
viewMatrix.Multiply(translateBack);
}
else
{
viewMatrix = new Matrix();
}
Refresh();
}
Run Code Online (Sandbox Code Playgroud)
绘图代码
这是我用来绘制的代码。这两个矩形仅供参考,第二个值new Pen(2)是为了确保我的线条保持 1 像素宽。
protected …Run Code Online (Sandbox Code Playgroud)