我一直在寻找一种解决方案来透明地向 WPF 图像控件添加平移和缩放功能,并且我找到了解决方案https://stackoverflow.com/a/6782715/584180 https://stackoverflow.com/a/6782715/584180, 由开发维斯瓦夫·索尔特斯 https://stackoverflow.com/users/282801/wies%C5%82aw-%C5%A0olt%C3%A9s and 康拉德·维尔特斯滕 https://stackoverflow.com/users/1525840/konrad-viltersten,这是杰出的。
现在我想向控件添加一个“鼠标单击”事件,以便我可以在原始图像坐标系中获取单击点的坐标,这样我就可以使用它们来检索像素颜色。
我知道会有一些舍入,如果图像缩小,颜色将与屏幕上显示的实际颜色不对应。我还了解用户可能会在图像边界之外单击,在这种情况下,我希望返回空点或负坐标。
我不是执行转换的 C# 方式的专家,目前我坚持这样做(将添加到 ZoomBorder.cs 类中):
public Point GetImageCoordsAt(MouseButtonEventArgs e)
{
if (child != null)
{
var tt = GetTranslateTransform(child);
var mousePos = e.GetPosition(this);
var transformOrigin = new Point(tt.X, tt.Y);
return mousePos; // Wrong: how do I transform this?
}
return null;
}
为了将来的参考,我想要实现的是:
public Point GetImageCoordsAt(MouseButtonEventArgs e)
{
if (child != null && child.IsMouseOver)
{
var controlSpacePosition = e.GetPosition(child);
var imageControl = this.Child as Image;
var mainViewModel = ((MainViewModel)base.DataContext);
if (imageControl != null && imageControl.Source != null)
{
// Convert from control space to image space
var x = Math.Floor(controlSpacePosition.X * imageControl.Source.Width / imageControl.ActualWidth);
var y = Math.Floor(controlSpacePosition.Y * imageControl.Source.Height / imageControl.ActualHeight);
return new Point(x, y);
}
}
return new Point(-1, -1);
}
它返回鼠标指针在原始图像系统中的坐标。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)