2013-08-06 32 views
0

我需要蒙版動態創建的圖像,以便它們將顯示爲圓形。 圖片可以是正方形的,但通常是長方形的......所以將顯示的圓圈可以從它的中心取出......所以所示的圓圈必須刻在圖片中並且居中居中。C#Windows Phone - 創建一個圓形的蒙版

這是我現在使用的代碼:

//Setting up the image 
Image image = new Image(); 
image.Height = 70; 
image.Width = 70; 
BitmapImage bitmapImage = new BitmapImage(); 
bitmapImage.UriSource = new Uri("http://url-of-the-image", UriKind.Absolute); 
image.CacheMode = new BitmapCache(); 
image.Source = bitmapImage; 
image.Stretch = Stretch.UniformToFill; 
image.VerticalAlignment = System.Windows.VerticalAlignment.Center; 

//Setting up the mask 
RadialGradientBrush opacityMask = new RadialGradientBrush(); 
GradientStop gs1 = new GradientStop(); 
GradientStop gs2 = new GradientStop(); 
GradientStop gs3 = new GradientStop(); 
gs1.Color = Color.FromArgb(255, 0, 0, 0); 
gs1.Offset = 0.0; 
gs2.Color = Color.FromArgb(255, 0, 0, 0); 
gs2.Offset = 0.999; 
gs3.Color = Color.FromArgb(0, 0, 0, 0); 
gs3.Offset = 1.0; 
opacityMask.GradientStops.Add(gs1); 
opacityMask.GradientStops.Add(gs2); 
opacityMask.GradientStops.Add(gs3); 
image.OpacityMask = opacityMask; 

//Showing the image 
panel.Children.Add(image); 

這一切工作正常,但是當圖片是矩形和非方形,這將創建一個橢圓而不是圓...任何想法關於如何強制它創建一個圈子?

我也試圖指定一些參數,但似乎並沒有幫助:

opacityMask.Center = new Point(0.5, 0.5); 
opacityMask.RadiusX = 0.5; 
opacityMask.RadiusY = 0.5; 

回答

0

好吧,今天我再次試圖解決這個問題,我想出了一個解決方案。 這是不是最好的,更清潔的解決方案永遠...但工程:)

我基本上包裹的圖片(未蒙面)到一個StackPanel,然後應用面具到的StackPanel代替;)

這是它的外觀如何(從原來的唯一改變的線是最後幾個):

//Setting up the image 
Image image = new Image(); 
image.Height = 70; 
image.Width = 70; 
BitmapImage bitmapImage = new BitmapImage(); 
bitmapImage.UriSource = new Uri("http://url-of-the-image", UriKind.Absolute); 
image.CacheMode = new BitmapCache(); 
image.Source = bitmapImage; 
image.Stretch = Stretch.UniformToFill; 
image.VerticalAlignment = System.Windows.VerticalAlignment.Center; 

//Setting up the mask 
RadialGradientBrush opacityMask = new RadialGradientBrush(); 
GradientStop gs1 = new GradientStop(); 
GradientStop gs2 = new GradientStop(); 
GradientStop gs3 = new GradientStop(); 
gs1.Color = Color.FromArgb(255, 0, 0, 0); 
gs1.Offset = 0.0; 
gs2.Color = Color.FromArgb(255, 0, 0, 0); 
gs2.Offset = 0.999; 
gs3.Color = Color.FromArgb(0, 0, 0, 0); 
gs3.Offset = 1.0; 
opacityMask.GradientStops.Add(gs1); 
opacityMask.GradientStops.Add(gs2); 
opacityMask.GradientStops.Add(gs3); 

//Setting up the StackPanel 
StackPanel sp = new StackPanel(); 
sp.OpacityMask = opacityMask; 

//Showing the image 
sp.Children.Add(image); 
panel.Children.Add(sp);