WPF-如何计算画布背景图像的裁剪量?
我有一个背景图像画布:WPF-如何计算画布背景图像的裁剪量?,wpf,Wpf,我有一个背景图像画布: var bi = new BitmapImage(new Uri(imgLocFull)); var ib = new ImageBrush(bi) {Stretch = Stretch.UniformToFill}; MyCanvas.Background = ib; 我将各种形状叠加在图像上,希望形状相对于背景图像的位置是固定的 如果调整应用程序窗口的大小,则水平和垂直裁剪的图像量将发生变化,并且当我的形状被重新绘制时,它们不会显示在背景图像上
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/oldheath*oldx
)将其移动到更接近正确的位置,但这并不完全有效,因为UniformToFill
拉伸模式可以看到一些图像从画布上剪下。画布的顶部和左侧
被“锚定”,当调整大小时,底部
和右侧
移动时。。。请尝试将Canvas.Top-Attached属性
与Canvas.Left-Attached属性一起设置,如下所示:
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.SetTop(l, point.Y); // * clipping factor here?
Canvas.SetLeft(l, point.X); // * clipping factor here?
MyCanvas.Children.Add(l);
更新>>>
您问过,或者是否有更好的方法固定形状相对于背景图像的位置
我回答了这个问题,所以我不明白你为什么还要做其他事情。。。如果只设置Grid.Top
和Grid.Left
属性,屏幕在调整大小*时,对象将不会移动。我接受Top
更好,但这并不能解决我的问题。我需要知道我的背景图像有多少被调整大小的操作剪掉了。不,但事实并非如此。调整图像大小时,覆盖的对象保持不变,不会随图像特征移动。设置.Top没有帮助。Point.X
和Point.Y
是在调整大小之前根据窗口大小计算的。我现在需要调整它们以适应调整大小的操作。