c# - 以图像的实际大小获取鼠标的真实位置,而不是鼠标在 PictureBox 中的位置

标签 c# .net c#-4.0 mouseevent picturebox

我有一张尺寸为 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;
            }
        }

我得到的 startPendP(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/

相关文章:

c# - 如何使用 .NET Core 解析 MPEG 视频流

.net - 是否可以通过垃圾收集创建 native 代码?

wpf - 在 WPF 应用程序中从网络摄像头抓取图片?

c# - 逆变解释

c# - WCF : Service receiving "null" string after being sent a full string

c# - 创建动态优惠券检查器

c# - 如何在 C# 中创建全局变量?

c# - Directory.CreateDirectory 并不总是创建文件夹

c# - 如何使用json.net(JObject/Jarray/Jtoken)并以最快的方式将类转换为字典?

c# - 使用 LINQ 从两个列表中选择不同的元素?