2013-08-06 29 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);