我正在尝试将鼠标点击坐标转换为画布坐标。画布可以动态缩放。我实现了缩放功能,缩放转换整个画布。画布本身有一个图像作为窗口的背景。当用户使用鼠标滚轮时,背景会放大和缩小。如何转换鼠标点击坐标以反映图像上的缩放位置?
缩放地图图像代码:
private void Canvas_MouseWheel(object sender, MouseWheelEventArgs e)
{
double zoom = 1.1;
scaleTransform.CenterX = this.Width / 2;
scaleTransform.CenterY = this.Height / 2;
if (e.Delta > 0)
{
scaleTransform.ScaleX *= zoom;
scaleTransform.ScaleY *= zoom;
}
else
{
scaleTransform.ScaleX /= zoom;
scaleTransform.ScaleY /= zoom;
}
// Zoom out limits
if(scaleTransform.ScaleX <= 1) { scaleTransform.ScaleX = 1; }
if(scaleTransform.ScaleY <= 1) { scaleTransform.ScaleY = 1; }
// Zoom in limits
if(scaleTransform.ScaleX >= 2.4) { scaleTransform.ScaleX = 2.4; }
if(scaleTransform.ScaleY >= 2.4) { scaleTransform.ScaleY = 2.4; }
}
将图标添加到地图图像:
private void mapImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var v = e.GetPosition(this);
var temp = GetImage("Assets/icon.png");
Canvas.SetLeft(temp, v.X);
Canvas.SetTop(temp, v.Y);
temp.Width = 32;
temp.Height = 32;
temp.RenderTransform = new ScaleTransform(0.5, 0.5, temp.Width / 2, temp.Height / 2);
mainCanvas.Children.Add(temp);
}
我基本上是想用鼠标左键在地图上添加一个新的图标图像。但是,如果在我尝试添加图标时放大了地图,则图像的位置与单击的地图位置不相关。它会转到离鼠标光标很远的地方。如何根据地图图像的比例转换坐标?
注意:如果我根本不放大(图像的比例为1),那么图标将精确放置在我单击的位置。
最简单的方法是获取原始图像大小,然后查看WPF图像控件(或您正在使用的任何其他控件)的实际宽度,并获取它们之间的比例
var eventLocation = e.GetPosition(MainImage);
var scaleRatio = SourceBitmap.Width / YourWpfImageControlName.ActualWidth;
var realX = eventLocation.X * scaleRatio;
var realY = eventLocation.Y * scaleRatio;
这假设您使用统一缩放(例如,保持纵横比),但您可以通过对高度进行相同的计算并将其应用于Y值,独立地对X轴和Y轴进行相同的比率计算
我猜参数“this”到e。GetPotion方法造成了麻烦。您需要从Canvas但不是从Window获取相对位置。参数应该是Canvas“main Canvas”。所以,后一种方法如下所示:
private void mainCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var v = e.GetPosition(mainCanvas);
var temp = new Image
{
Source = new BitmapImage(new Uri("Assets/icon.png", UriKind.Relative)),
Width = 32,
Height = 32
};
Canvas.SetLeft(temp, v.X - temp.Width / 2);
Canvas.SetTop(temp, v.Y - temp.Height / 2);
mainCanvas.Children.Add(temp);
}
我们体验一下Events类吧!为了使其尽量简单,我们使用Events类的getMousePos()获取鼠标光标的坐标,并在画布的左上角显示出来。getMousePos()方法返回相对于画布的坐标,它会考虑画布相对于页面的偏移,以及页面的滚动位置。 图6-1 画布坐标系 操作步骤 按照以下步骤,在每次鼠标移动时,获取画布上的鼠标坐标,并在画布的左上角显示出来: 1. 链接到Events类: <sc
我正在尝试将球坐标转换为笛卡尔坐标,以绘制一个简单的三维金字塔。 下面是获取金字塔四个主要角的代码,具体取决于极角yrad和方位角xrad以及顶点坐标x和y: 方位角轴似乎工作正常,但问题是,在操纵极轴角时,当它们越过天顶或底部时,左右会互换,如图所示(选择顶部的mp4以更平滑地播放):http://gyazo.com/4a245713c232893960863cf4ea4186f6 怎么了?
我试图将图像从极坐标转换为笛卡尔坐标,但在应用公式后,我得到了浮点坐标(r和teta),我不知道如何使用x和y的浮点来表示空间中的点。可能有一种方法可以将它们转换为整数,并仍然保留分布,但我不知道如何。我知道OpenCV中有像warpPolar这样的函数,但我想自己实现它。任何想法都会有帮助:) 这是我的代码:
功能介绍 坐标转换(Convert)是从一种坐标系统变换到另一种坐标系统的过程,可以通过建立两个坐标系统之间一一对应的关系来实现,是各种比例尺地图测量和编绘中建立地图数学基础必不可少的步骤。坐标转换服务实现了四维高德坐标、百度坐标、搜狗等坐标之间相互转换的功能。 注:该服务不支持将偏移GPS坐标(如:百度坐标、高德坐标等)转换为未偏移GPS坐标。 适用场景 按需实现现有坐标系到需求坐标系之间的转换
实现四维高德坐标、百度坐标、搜狗等坐标之间的转换。注意:不支持将偏移GPS坐标(如:百度坐标、高德坐标等)转换为未偏移GPS坐标。 使用服务前需要先申请 key。 资源服务地址:https://www.supermapol.com/iserver/services/coordconvert/rest/coordinate/convert 资源接口参数说明 坐标转换服务服务支持GET和HEAD请求,
我正在使用PDFBox的在Java中显示PDF页面。我正试图基于页面中的(即AcroForm字段)在PDF页面的图像上创建可点击的区域。问题是PDF似乎使用了一个完全不同的坐标系: 收益率 如果我要估计图像上字段矩形的实际尺寸,它将是40,40,50,10(x,y,宽度,高度)。这两者之间没有明显的相关性,我似乎找不到任何关于这一点的信息与谷歌。 如何确定PDPage的cosobects的像素位置