我有一张带背景图片的画布:
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
拉伸模式,它看起来有些图像被剪裁,但这不太合适离开画布。
答案 0 :(得分:0)
Top
的{{1}}和Left
被'锚定',Canvas
和Bottom
在调整大小时移动...尝试设置{相反,{1}}与Right
一样:
Canvas.Top Attached Property
更新>>>
您问过或者是否有更好的方法来修复形状相对于背景图像的位置?
我回答了这个问题,所以我不明白为什么你需要做任何其他事情......如果你只设置Canvas.Left Attached Property
和{{1,那么当屏幕调整大小时你的对象不会移动属性。