Whi*_*Boy 5 c# scaling graphic winforms
我正在制作一个图形程序,但我卡在需要让鼠标坐标等于图形比例的地方。使用图片框,我使用变换来缩放我的图形:
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;
Run Code Online (Sandbox Code Playgroud)
我正在使用 MouseMove 功能。有没有办法转换鼠标坐标?当我将鼠标放在 x=9 上时,我需要鼠标坐标为 9。
private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
{
Console.WriteLine(e.X);
}
Run Code Online (Sandbox Code Playgroud)
正如汉斯的评论所暗示的那样,您可以用一秒钟的时间Matrix来完成此任务。您可以通过复制原始数据Matrix并调用副本的Invert()方法来获取它,也可以Matrix通过反转原始数据的输入矩形来从头开始创建新数据。
恕我直言,求逆更容易,但这确实意味着您需要创建逆矩阵并将其存储在某个地方。例如:
Matrix transform = new Matrix(world, device_points);
gr.Transform = transform;
inverseTransform = transform.Clone();
inverseTransform.Invert();
Run Code Online (Sandbox Code Playgroud)
其中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);
Run Code Online (Sandbox Code Playgroud)
无论哪种情况,您只需使用Matrix.TransformPoints()鼠标处理代码中的方法对鼠标坐标应用逆变换即可返回到世界坐标。
| 归档时间: |
|
| 查看次数: |
730 次 |
| 最近记录: |