转换鼠标坐标

神童

我正在制作一个图形程序,并停留在需要使鼠标坐标等于相等图形比例的位置。对于picturebox,我使用transform缩放图形:

RectangleF world = new RectangleF(wxmin, wymin, wwid, whgt);
        PointF[] device_points =
            {
                new PointF(0, PictureBox1.ClientSize.Height),
                new PointF(PictureBox1.ClientSize.Width, PictureBox1.ClientSize.Height),
                new PointF(0, 0),
            };
        Matrix transform = new Matrix(world, device_points);
        gr.Transform = transform;

在此处输入图片说明我正在使用MouseMove功能。有没有一种方法可以转换鼠标坐标?当我将鼠标放在x = 9上时,我需要鼠标坐标为9。

private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        Console.WriteLine(e.X);
    }
彼得·杜尼奥(Peter Duniho)

就像汉斯的评论所暗示的那样,您可以花一秒钟的时间Matrix来完成此任务。您可以通过复制原始文件Matrix并调用复制文件的Invert()方法来获取它,也可以通过从原始文件中Matrix反转输入矩形来从头开始创建新文件

恕我直言,求逆比较容易,但这确实意味着您需要创建逆矩阵并将其存储在某个位置。例如:

    Matrix transform = new Matrix(world, device_points);
    gr.Transform = transform;
    inverseTransform = transform.Clone();
    inverseTransform.Invert();

类中inverseTransform的一个字段而不是局部变量在哪里,以便您的鼠标处理代码可以在以后使用它。

如果必须构造Matrix后者,则可以这样进行:

RectangleF device = new RectangleF(new Point(), PictureBox1.ClientSize);
PointF[] world_points =
    {
        new PointF(wxmin, wymin + whgt),
        new PointF(wxmin + wwid, wymin + whgt),
        new PointF(wxmin, wymin),
    };
Matrix inverseTransform = new Matrix(device, world_points);

无论哪种情况,您都只需Matrix.TransformPoints()在鼠标处理代码中使用方法将逆变换应用于鼠标坐标即可返回您的世界坐标。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章