2013-11-27 28 views
0

我有背景圖像的帆布: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拉伸模式,這看起來有些圖像從畫布上剪掉,所以這不起作用。

+0

'Point.X'和'Point.Y'是在調整大小之前根據窗口大小計算出來的。我現在需要調整它們以迎合尺寸調整操作。 – dylanT

回答

0

TopCanvasLeft是 '錨定',在調整大小時BottomRight移動...嘗試設置Canvas.Top Attached Property,隨之Canvas.Left Attached Property一起爲你:

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.TopGrid.Left性能。

+0

我接受'頂部'更好,但這不能解決我的問題。我需要知道調整大小操作會裁剪多少背景圖像。 – dylanT

+0

不,但那不會發生。在調整圖像大小時,重疊的對象將保持原位,並且不會隨圖像特徵移動。設置.Top不起作用。 – dylanT