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