【问题标题】:PictureBox zoom miscalculationPictureBox 缩放错误计算
【发布时间】:2012-06-04 04:55:43
【问题描述】:

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

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);
        }
     }

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

【问题讨论】:

  • +1,反对票对这个问题有点苛刻,即使没有代码,考虑到问题中已经提供的内容,居中的概念是通用的
  • 规模上的f 是不必要的,只是在编译后的代码中添加了更多命令。 (单 [float] 到 double 的转换)
  • 谢谢 Cole,那是我在浮动时忘记的一段剩余代码。

标签: c# zooming picturebox mousewheel


【解决方案1】:

如果你想使你的缩放居中

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

更新

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

【讨论】:

  • 这可能适用于我上面发布的代码。但是我还有其他复杂情况,例如绘制到图片框的所有内容都被翻转了。我应该将该信息和代码添加到问题中还是在这样的评论中详细说明?
  • 将其添加到您的问题中,如果它与您的第三方渲染软件有关,我可能无法提供帮助......所以大家都可以看到
猜你喜欢
  • 1970-01-01
  • 2019-01-07
  • 2019-10-25
  • 2020-09-24
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 2017-12-28
相关资源
最近更新 更多