【问题标题】:Trying to make a zoom effect尝试制作缩放效果
【发布时间】:2010-03-12 10:40:47
【问题描述】:

我正在尝试使用鼠标滚轮在图片框上制作缩放效果。一切都很好,除了当我使用鼠标中键放大或缩小时,它可以,但它不会放大或缩小鼠标光标所在的点。当我放大点时,我希望它总是滑动。请帮我添加一个代码 sn-p 使其工作。

这是我的代码:

int i = 5;
int index = 10;
private double[] zoomfactor = { .25, .33, .50, .66, .80, 1, 1.25, 1.5, 2.0, 2.5, 3.0 };

private void Zoom(int i)
{

  double new_Zoom = zoomfactor[i];

  imgBox.Width = Convert.ToInt32(imgBox.Image.Width * new_Zoom);
  imgBox.Height = Convert.ToInt32(imgBox.Image.Height * new_Zoom);

}

private void On_wheel(object sender, System.Windows.Forms.MouseEventArgs e)
{
  i = i + e.Delta / 120;
  if (i < 0)
  {
    i = 0;
  }
  else
  {
    if (i <= index)
      i = i;
    else
      i = index;
   }
   Zoom(i);
}

【问题讨论】:

    标签: c# winforms zooming mousewheel


    【解决方案1】:

    需要根据鼠标相对于窗体的位置来调整图片框的位置。

    这是一个粗略但可行的示例,说明您可以如何执行此操作:

    var i = 5;
    var zoomfactor = new[] {.25, .33, .50, .66, .80, 1, 1.25, 1.5, 2.0, 2.5, 3.0};
    var origin = new Point(100, 100);
    var image = Image.FromFile(@"c:\example.png");
    var imgBox = new PictureBox {
            Location = origin,
            Size = image.Size,
            Image = image,
            SizeMode = PictureBoxSizeMode.StretchImage
        };
    var form = new Form {
            Size = new Size(800, 600),
            Controls = {imgBox}
        };
    form.MouseWheel += (sender, e) => {
            i += e.Delta/120;
            if (i < 0) {
                i = 0;
            }
            if (i >= zoomfactor.Length) {
                i = zoomfactor.Length - 1;
            }
            var newZoom = zoomfactor[i];
            imgBox.Width = (int) (imgBox.Image.Width*newZoom);
            imgBox.Height = (int) (imgBox.Image.Height*newZoom);
            imgBox.Left = (int) (e.X - newZoom*(e.X - origin.X));
            imgBox.Top = (int) (e.Y - newZoom*(e.Y - origin.Y));
        };
    form.ShowDialog();
    

    【讨论】:

    • 当你现在可以在任何地方使用“var”时,拥有真正的数据类型有什么意义......?我什至不知道你可以在 C# 中使用 var 我以前从未见过它,除了过去一周左右......
    • var 是一种“真实数据类型”,它只是隐式类型
    • 谢谢它真的很有帮助,但这次我需要放大或缩小时的动画来取悦眼睛。
    • @anon271334 C# 'var' 关键字与 Javascript 或其他动态语言完全不同。 C# 仍然是静态类型的。
    【解决方案2】:

    您没有考虑鼠标坐标。

    MouseEventArgs 类告诉您鼠标在哪里(XYLocation 属性),因此您需要进行相应调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多