Отсечение изображения с помощью Path в Silverlight - PullRequest
2 голосов
/ 17 августа 2011

Как обрезать изображение в Silverlight, используя собственный путь (в коде позади, а не в XAML). У меня есть кусок головоломки, похожая на фигуру, написанная на пути, и я хочу использовать его для обрезки любого изображения.

В настоящее время это работает путем отсечения, используя прямоугольник, код (C #):

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);
            }
        }
    }

В XAML есть только один Canvas, называемый ClipCanvas.

1 Ответ

1 голос
/ 17 августа 2011

Хорошо, не идеально.Но работает из-за кода

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.Пробовал другие подходы, и это был единственный, который работал.

...