Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF-如何计算画布背景图像的裁剪量?_Wpf - Fatal编程技术网

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
是在调整大小之前根据窗口大小计算的。我现在需要调整它们以适应调整大小的操作。