我一直试图这样做几个小时,但是对于我的生活,我无法做到这一点。
我要做的只是移动winform应用程序中图片框中的图像。我的图像大约是1000x1000像素,我的盒子就像400x500那样任意,所以,例如,当我点击鼠标时,我希望图像向左移动50。但图像框应保持相同的大小。
然而,对于我的生活,我无法让它发挥作用。我能做的是以下几点:
if (kinectController.hands[0].fingertips.Count == 1)
{
pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
}
此功能适用于我的kinect手指追踪应用。因此,当应用程序在屏幕上找到可见的单个查找点时,图像将居中。然而,我最终希望图像随着我的手指移动而移动,一旦我计算出将图像移动到一侧的基本步骤,就会出现这种情况。
对此有任何帮助将不胜感激。
答案 0 :(得分:14)
我做了一些研究,显然在PictureBox中移动图像并不是一件容易的事,至少我找不到任何能使这成为可能的东西(不是说没有办法做到这一点)虽然)。
然而,我提出了一些“解决方法”,看看这是否符合您的需求。要做到这一点:
现在,将此代码放在您的表单中
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;
}
}
现在,无论何时单击并拖动PictureBox,它都不会实际移动其中的图像,而是在面板中的PictureBox控件。再一次,不完全是你想要的,我不确定这会如何转换为Kinect,但我希望这能让你走上正轨。
答案 1 :(得分:1)
信誉欠佳,无法发表评论,但如果有人需要对图像的移动进行更多控制,以使图像不能越过边界,我想补充一下本·布莱克(Ben Black):
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
Control c = sender as Control;
if (Dragging && c != null)
{
int maxX = pictureBox1.Size.Width * -1 + panel.Size.Width;
int maxY = pictureBox1.Size.Height * -1 + panel.Size.Height;
int newposLeft = e.X + c.Left - xPos;
int newposTop = e.Y + c.Top - yPos;
if (newposTop > 0)
{
newposTop = 0;
}
if (newposLeft > 0)
{
newposLeft = 0;
}
if (newposLeft < maxX)
{
newposLeft = maxX;
}
if (newposTop < maxY)
{
newposTop = maxY;
}
c.Top = newposTop;
c.Left = newposLeft;
}
}