winform在图片框内移动图像

N0x*_*xus 7 c# winforms

我一直试图这样做几个小时,但对于我的生活,我无法做到这一点.

我想要做的只是移动winform应用程序中的图片框中找到的图像.我的图像大约是1000x1000像素,我的盒子就像400x500那样任意,所以,例如,当我点击鼠标时,我希望图像向左移动50.但图像框应保持相同的大小.

然而,对于我的生活,我无法让它发挥作用.我能做的是以下内容:

     if (kinectController.hands[0].fingertips.Count == 1)
        {
            pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;

        }
Run Code Online (Sandbox Code Playgroud)

此功能适用于我的kinect手指跟踪应用程序.因此,当应用程序在屏幕上找到可见的单个查找点时,图像将居中.然而,我最终希望图像随着我的手指移动而移动,一旦我计算出将图像移动到一侧的基本步骤就会出现.

任何帮助都将不胜感激.

Ben*_*ack 15

我做了一些研究,显然在PictureBox中移动图像并不是一件容易的事,至少我找不到任何可以实现这一点的东西(不是说没有办法做到这一点).

但是,我提出了一些"解决方法",看看这是否符合您的需求.要做到这一点:

  • 创建一个Panel控件,并将其调整为您想要显示的图像的大小
  • 在该面板中放置一个PictureBox控件,其中包含您的图像,并将SizeMode属性设置为AutoSize.

现在,将此代码放在您的表单中

private bool Dragging;
private int xPos;
private int yPos;
private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { Dragging = false; }
private void pictureBox1_MouseDown(object sender, MouseEventArgs e) {
    if (e.Button == MouseButtons.Left) { 
        Dragging = true;
        xPos = e.X;
        yPos = e.Y;
    }
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e) {
    Control c = sender as Control;
    if (Dragging && c!= null) {
        c.Top = e.Y + c.Top - yPos;
        c.Left = e.X + c.Left - xPos;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,无论何时单击并拖动PictureBox,它都不会实际移动其中的图像,而是在面板中的PictureBox控件.再一次,不完全是你在寻找什么,我不知道这将如何转换为Kinect,但我希望这能让你走上正轨.