我的图像大小为1278 X 958,我正在对其进行一些图像处理。
由于图像尺寸很大,我在pictureBox中使用以下命令加载它:
imGrayShow = cap.QueryGrayFrame();
picBOriginal.Image = imGrayShow.ToBitmap();
pictureBox大小是299 X 204并且在pictureBox中看到我的原始图像我把
pictureBox Size Mode = StretchImage
故事从这里开始:
我想使用鼠标按下&鼠标加载事件以获取用户使用以下命令选择的区域的位置:
private void picBOriginal_MouseUp(object sender, MouseEventArgs e)
{
if (stopEventMouseDrag == true)
{
endP = e.Location;
if (startP != endP)
{
stopEventMouseDrag = false;
}
}
}
private void picBOriginal_MouseDown(object sender, MouseEventArgs e)
{
if (stopEventMouseDrag == true)
{
startP = e.Location;
}
}
我得到的是 startP 和 endP (145,2)和(295,83)分别;但这些是mouseBox在pictureBox中的位置,而我希望在原始Image中找到鼠标向下和鼠标按下的真实位置。 (这是=> startP: 890,1 endP: 1277,879 )
我怎么可能在原始图像中获得startP-endP的REAL位置?
答案 0 :(得分:4)
我认为你的数学有点偏差。如果您有一个1278 x 958图像,并且想要将其缩小到299像素宽,则需要将所有内容除以1278 / 299
4.27 。要保持纵横比相同,宽度必须为958 / 4.27
,其舍入为 224 。
然后当你收到鼠标下来的坐标时启动事件,您只需将坐标乘以 4.27 即可将值向上扩展为原始图像。
答案 1 :(得分:1)
startP和endP是相对于您的图片框或相对于屏幕的点?根据我的记忆,Location
中的MouseEventArgs
是相对于表单的,这不是很有用。
所以...它可能会结束这样的事情:
// Position of the mouse, relative to the upper left corner of the picture box.
Point controlRelative = myPictureBox.PointToClient(MousePosition);
// Size of the image inside the picture box
Size imageSize = myPictureBox.Image.Size;
// Size of the picture box
Size boxSize = myPictureBox.Size;
Point imagePosition = new Point((imageSize.Width / boxSize.Width) * controlRelative.X,
(imageSize.Height / boxSize.Height) * controlRelative.Y);