我有一张尺寸为 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) 分别;但这些是鼠标在 pictureBox 中的位置,而我希望在我的原始图像中找出鼠标按下和鼠标按下的真实位置。 (它们是=> startP: 890,1 endP: 1277,879 )
我怎么可能在原始图像中获得 startP-endP 的真实位置?
最佳答案
我觉得你的数学有点不对劲。如果您有一张 1278 x 958 的图像并且您想要将其缩小到 299 像素宽,那么您需要将所有内容除以 1278/299
,即 4.27。要保持纵横比相同,宽度需要为 958/4.27
,四舍五入为 224。
然后当您收到来自鼠标按下和向上事件的坐标时,您只需将坐标乘以 4.27 以将值按比例放大到原始图像。
关于c# - 以图像的实际大小获取鼠标的真实位置,而不是鼠标在 PictureBox 中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13411589/