我正在尝试使用鼠标滚轮放大图片框。 使用以下变量:
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();
}
当鼠标滚轮向前移动时,我会增加比例变量并刷新该框。它在picturebox paint方法中使用此代码重新绘制:
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);
}
}
它会缩放正确的数量,但它似乎会向左上角缩放,因为偏移保持不变。缩小时反之亦然。当我转动鼠标滚轮以直接缩放到鼠标下方的点时,我应该如何编辑偏移?
答案 0 :(得分:0)
如果您想放大缩放
double offsetX = scale/2
double offsetY = scale/2
更新
要回答关于翻转图片的第二部分,听起来您没有区分图片的x,y与x,y屏幕坐标。通常,屏幕坐标从屏幕顶部开始,因此左上角是0,0,但是当您绘制图片时,图片的0,0位于左下角,因此您使用-y。你想要做的是从0,0开始绘制到0,没有翻转的MAXY。对于此实现细节,您的代码将有助于呵呵:)