我有一个带有pictureBox的表单,显示图像。我还有2个按钮 - 放大和缩小。当图像放大时,我希望能够将其拖动到旁边,以便能够看到图像中的其他部分。 问题是,当我单击放大按钮时,它工作正常,但拖动不会移动图片框内的图像(我可以拖动图像,但是当我释放鼠标按钮时它总是返回到相同的位置) ,当我缩小图像时不居中并仅显示已放大的图像的一部分,它还会更改图片框的大小并更改其在表单上的位置。
我的代码:
private double ZOOM_INTERVAL = 0.25;
private double currentZoom = 1.0;
//zoom out from product image
private void ZoomOutBtn_Click(object sender, EventArgs e)
{
if (currentZoom > 0.5)
{
currentZoom -= ZOOM_INTERVAL;
ResizeImage();
}
}
//zoom in to product image
private void ZoomInBtn_Click(object sender, EventArgs e)
{
currentZoom += ZOOM_INTERVAL;
ResizeImage();
}
private void ResizeImage()
{
Bitmap img = initialImage;
if (img != null)
{
Bitmap bmp = new Bitmap(img, Convert.ToInt32(initialImage.Width * currentZoom), Convert.ToInt32(initialImage.Height * currentZoom));
Graphics g = Graphics.FromImage(bmp);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
pictureBox1.Image = bmp;
g.Dispose();
}
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
mouseDownLoc = e.Location;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point currentMousePos = e.Location;
int distanceX = currentMousePos.X - mouseDownLoc.X;
int distanceY = currentMousePos.Y - mouseDownLoc.Y;
int newX = pictureBox1.Location.X + distanceX;
int newY = pictureBox1.Location.Y + distanceY;
if(newX + pictureBox1.Image.Width < pictureBox1.Image.Width && pictureBox1.Image.Width + newX > panel1.Width)
pictureBox1.Location = new Point(newX, pictureBox1.Location.Y);
if(newY + pictureBox1.Image.Height < pictureBox1.Image.Height && pictureBox1.Image.Height + newY > panel1.Height)
pictureBox1.Location = new Point(pictureBox1.Location.X, newY);
}
}
提前致谢。