2011-08-17 9 views
2

カスタムパスを使用してSilverlightでイメージをクリップする方法(XAMLではなくコードビハインドで)。 パスに書かれた形のようなパズルピースがあり、それを使ってイメージをクリップしたいと思っています。Silverlightでのパスを使用したイメージのクリッピング

private void UserControl_Loaded(object sender, RoutedEventArgs e) 
    { 
     int NUM_COLUMN = 8; 
     int NUM_ROW = 8; 
     double gridWidth = 60; 
     double gridHeight = 60; 
     string url = "Images/Sun.png"; 

     // C# 
     for (int i = 0; i < NUM_COLUMN; i++) 
     { 
      for (int j = 0; j < NUM_ROW; j++) 
      { 
       double offsetX = (double)i * gridWidth; 
       double offsetY = (double)j * gridHeight; 

       Image image = new Image(); 
       image.Source = new BitmapImage(new Uri(url, UriKind.Relative)); 

       // clip the image 

       RectangleGeometry r = new RectangleGeometry(); 


       r.Rect = new Rect(offsetX, offsetY, gridWidth, gridHeight); 
       image.Clip = r;     

       this.ClipCanvas.Children.Add(image); 
      } 
     } 
    } 

一つだけCanvasXAMLClipCanvasと呼ばれるがあります:

は現在、それが使用して矩形をクリッピングすることによって動作しますが、コードは(C#の)です。

+0

現在のコードまたはXamlを開始点として指定できますか? –

+1

はい。編集された質問を参照してください。 – Arterius

答えて

1

いいえ、理想的ではありません。コードビハインドからの作業

Image image = XamlReader.Load(@"<Image xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" Clip=""M 41.1,33.7 C 41.1,33.7 39.9,32.2 39.9,30.8 C 39.9,30.6 39.5,29.8 39.3,29.5 C 39.1,29.3 38.4,28.6 37.8,28.2 C 37.2,27.9 35,26.6 34.6,22.4 Z "" />") as Image; 
image.Source = new BitmapImage(new Uri("Desert.jpg", UriKind.Relative)); 

Xamlのクリップに設定し、XamlReaderを使用してイメージを作成します。他のアプローチを試してみましたが、これが働いたのはこれだけでした。

関連する問題