WPF - 如何计算出裁剪了多少画布背景图像?

时间:2013-11-27 12:35:37

标签: wpf

我有一张带背景图片的画布:

var bi = new BitmapImage(new Uri(imgLocFull));           
var ib = new ImageBrush(bi) {Stretch = Stretch.UniformToFill};
MyCanvas.Background = ib;

我在图像上覆盖各种形状,并希望修复形状相对于背景图像的位置。

如果调整了我的应用程序窗口的大小,水平和垂直裁剪的图像数量会发生变化,当重绘我的形状时,它们不会出现在背景图像上的相同位置。

如何确定裁剪了多少图像(将调整因子应用于重叠对象的位置?)或者是否有更好的方法来修复形状相对于背景图像的位置?

这是我目前的绘图代码:

var l = new Ellipse();
var scb = new SolidColorBrush();
scb.Color = Color.FromRgb(rCol, gCol, bCol);
l.Fill = scb;
l.StrokeThickness = 0;
l.Width = 3;
l.Height = 3;
Canvas.SetBottom(l, point.Y); // * clipping factor here?
Canvas.SetLeft(l, point.X);  // * clipping factor here?
MyCanvas.Children.Add(l);

编辑:进一步澄清 这是我想要实现的具体例子。我的图像是航空照片,我想标记一个特定的地理特征(例如,椭圆。)

调整窗口大小时,椭圆不会停留在要素上,而是相对于画布的左侧和顶部保持不变。

我可以通过使用因子(newx = newheight/oldheight * oldx)移动它来使它更接近正确的位置但是由于UniformToFill拉伸模式,它看起来有些图像被剪裁,但这不太合适离开画布。

1 个答案:

答案 0 :(得分:0)

Top的{​​{1}}和Left被'锚定',CanvasBottom在调整大小时移动...尝试设置{相反,{1}}与Right一样:

Canvas.Top Attached Property

更新>>>

您问过或者是否有更好的方法来修复形状相对于背景图像的位置?

我回答了这个问题,所以我不明白为什么你需要做任何其他事情......如果你只设置Canvas.Left Attached Property和{{1,那么当屏幕调整大小时你的对象不会移动属性。