图片框缩放计算错误

本文关键字:计算 错误 缩放 | 更新日期: 2023-09-27 18:35:37

>我正在尝试使用鼠标滚轮放大图片框。使用以下变量:

public static int offsetX = 0;
public static int offsetY = 0;
public static double scale = .05;

我在图片框中绘制了一系列多边形。但是,我希望左下角引用 0,所以我将所有内容绘制到 -y 的表单中。绘制的点数受到上述变量的影响,但实际点数保持不变。

void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
    if (e.Delta > 0)
        scale += .025;
    else
        scale -= .025;
    pictureBox1.Invalidate();
}

当鼠标滚轮向前移动时,我增加比例变量并刷新框。在图片框绘制方法中使用以下代码重新绘制它:

     Graphics g = e.Graphics;
     foreach (Member m in activeTruss.members)
     {
        if (m.Visible == true)
        {
           Point[] pointArray = new Point[m.poly.Points.Count()];
           int index = 0;
           foreach (System.Windows.Point p in m.poly.Points)
           {
              pointArray[index].X = (int)((p.X + offsetX) * scale);
              pointArray[index].Y = (int)-((p.Y + offsetY) * scale);
              index++;
           }
           SolidBrush myBrush = new SolidBrush(m.color);
           g.FillPolygon(myBrush, pointArray);
        }
     }

它缩放正确的量,但它似乎向左上角缩放,因为偏移量保持不变。缩小时情况正好相反。当我转动鼠标滚轮以便直接缩放到鼠标下方的点时,我应该如何编辑偏移量?

图片框缩放计算错误

如果要居中缩放

double offsetX = scale/2
double offsetY = scale/2

更新

要回答您关于翻转图片的第二部分,听起来您没有区分图片的 x,y 与 x,y 屏幕坐标。通常,屏幕坐标从屏幕顶部开始,因此左上角为 0,0,但是当您绘制图片时,图片的 0,0 位于左下角,因此您使用 -y。您要做的是在不翻转的情况下开始从 0,0 到 0,MAXY 绘制。对于此实现细节,您的代码将有很大帮助,嘿嘿:)