gpt4 book ai didi

c# - 使用平移和缩放计算正确的光标位置

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:49 29 4
gpt4 key购买 nike

我已经为这个问题纠结了大约一个小时。

我有一个支持平移和缩放的视口(viewport),平移是通过存储 X 轴和 Y 轴的偏移量来处理的。缩放只是一个从 0.2 到 14 的 float 。

我的问题是,我需要能够将内容放置在用户在视口(viewport)中单击的位置,但是当我缩放和平移时,鼠标坐标不正确。我一直无法弄清楚如何正确计算鼠标坐标。

这是一张显示我目前拥有的图片:http://i.imgur.com/WQSXKJ2.png

如您所见,鼠标原点始终位于视口(viewport)组件的左上角。您可以在图像的左下角看到平移 X 和 Y 偏移以及缩放值。我还添加了一个鼠标坐标相对于视口(viewport)左上角的示例。

现在因为在该图像中它当前放大了我放置的对象将被偏移。

感谢您的宝贵时间!

使用适合我的情况的解决方案进行编辑:

void Viewport_MouseClick(object sender, MouseEventArgs e){
Point mousePosition = new Point((int)((e.X - Pan.X) / Zoom),
(int)((e.Y - Pan.Y) / Zoom));
}

这会计算出正确的“屏幕空间”鼠标位置,同时考虑平移和缩放。我通过玩弄 TaWs 答案得到了那个解决方案。感谢您的帮助! :)

最佳答案

使用 TrackBar 进行缩放,另外两个用于偏移,这似乎可行:

private void panel1_Paint(object sender, PaintEventArgs e)
{
using (Bitmap bmp = new Bitmap(filename))
{
e.Graphics.ScaleTransform(zoom, zoom);
e.Graphics.DrawImage(bmp, trb_offsetX.Value, trb_offsetY.Value);
}
}

float zoom = 1f;

private void panel1_MouseMove(object sender, MouseEventArgs e)
{

Point mouseLocation = e.Location;
Point imageLocation = new Point((int)((mouseLocation.X / zoom - trb_offsetX.Value)),
(int)((mouseLocation.Y / zoom - trb_offsetY.Value)));

st_mousePos.Text = " " + imageLocation.ToString();

}


private void trackBar1_Scroll(object sender, EventArgs e)
{
zoom = trackBar1.Value;
panel1.Invalidate();
}

我已经添加了 Paint 事件的代码,所以您可以看看您是否也是这样处理它的。

关于c# - 使用平移和缩放计算正确的光标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24749318/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com