如何检索WinForms PictureBox的缩放系数?

我需要鼠标指针在PictureBox上的精确位置。

我使用PictureBox的MouseMove事件。

在这个PictureBox上,我使用“缩放”属性来显示图像。

获取鼠标在原始(未经处理)图像上的位置的正确方法是什么?

有没有办法找到比例因子并使用它?

我认为需要使用imageOriginalSize / imageShowedSize来检索此比例因子。

我用这个函数:

float scaleFactorX = mypic.ClientSize.Width / mypic.Image.Size.Width; float scaleFactorY = mypic.ClientSize.Height / mypic.Image.Size.Height; 

是否可以使用此值来获取光标在图像上的正确位置?

我今天必须解决同样的问题。 我希望它适用于任何宽度:高度比的图像。

这是我在原始全尺寸图像上找到’unscaled_p’点的方法。

  Point p = pictureBox1.PointToClient(Cursor.Position); Point unscaled_p = new Point(); // image and container dimensions int w_i = pictureBox1.Image.Width; int h_i = pictureBox1.Image.Height; int w_c = pictureBox1.Width; int h_c = pictureBox1.Height; 

第一个技巧是确定图像相对于容器是水平还是垂直放大,因此您将知道哪个图像尺寸完全填充容器。

  float imageRatio = w_i / (float)h_i; // image W:H ratio float containerRatio = w_c / (float)h_c; // container W:H ratio if (imageRatio >= containerRatio) { // horizontal image float scaleFactor = w_c / (float)w_i; float scaledHeight = h_i * scaleFactor; // calculate gap between top of container and top of image float filler = Math.Abs(h_c - scaledHeight) / 2; unscaled_p.X = (int)(pX / scaleFactor); unscaled_p.Y = (int)((pY - filler) / scaleFactor); } else { // vertical image float scaleFactor = h_c / (float)h_i; float scaledWidth = w_i * scaleFactor; float filler = Math.Abs(w_c - scaledWidth) / 2; unscaled_p.X = (int)((pX - filler) / scaleFactor); unscaled_p.Y = (int)(pY / scaleFactor); } return unscaled_p; 

请注意,由于缩放使图像居中,因此必须考虑“填充”长度以确定未由图像填充的尺寸。 结果’unscaled_p’是未缩放图像上与’p’相关的点。

希望有所帮助!

如果我理解你的话,我相信你会想要做这样的事情:

假设:PictureBox适合图像宽度/高度,PictureBox边框与实际图像之间没有空间。

 ratioX = eX / pictureBox.ClientSize.Width; ratioY = eY / pictureBox.ClientSize.Height; imageX = image.Width * ratioX; imageY = image.Height * ratioY; 

这应该给你原始图像中的像素点。