Как я могу использовать PathGeometry в качестве маски для BitmapSource (или любых данных изображения)? - PullRequest
1 голос
/ 09 апреля 2010

Если у меня есть BitmapSource (на самом деле у меня есть доступ и к необработанным пикселям, если необходимо), как я могу использовать PathGeometry в качестве маски для вырезания определенных частей изображения?

   01234567890123456789
 0 --------------------
 1 |   +     +        |
 2 |      *           |
 3 |          *    )  |
 4 |    *             |
 5 |            (     |
 6 --------------------

Предполагая, что у меня есть PathGeometry, которая описывает прямоугольник, который идет от (0, 0) до (8, 3), я бы хотел получить одно из следующих двух изображений:

   01234567890123456789
 0 --------------------
 1 |   +              |
 2 |      *           |
 3 |                  |
 4 |                  |
 5 |                  |
 6 --------------------

или

   012345678
 0 ---------
 1 |   +   |
 2 |      *|
 3 ---------

Ответы [ 2 ]

2 голосов
/ 11 апреля 2010

Хорошо, тогда мой пример должен работать.Это может быть не самым эффективным в зависимости от вашей ситуации, но это будет отправной точкой.

Это будет выглядеть примерно так.Очевидно, что точки в клипе будут отличаться для вашей ситуации, но вы поймете идею.

<Image Source="SomeImage.jpg">
            <Image.Clip>
                <PathGeometry>
                    <PathFigure StartPoint="0,0"
                                IsClosed="True">
                        <LineSegment Point="25,0" />
                        <LineSegment Point="25,25" />
                        <LineSegment Point="0,25" />
                    </PathFigure>
                </PathGeometry>
            </Image.Clip>
        </Image>
0 голосов
/ 10 апреля 2010

Не уверен, что вы подразумеваете под «вырезанием» определенных частей.Это может означать, что вам нужно просто отобразить области изображения или создать новое изображение только вырезанной части или чего-то другого?

Моя первая мысль - самое простое решение, просто установить BitmapImage в качествеисточник элемента Image и затем установите свойство Image.Clip для геометрии пути, которая включает в себя область, которую вы хотите.

Это обрезает изображение таким образом, что отображается только та область, которую вы хотите, и все, что находится за пределами геометрии путиклипа будет «обрезан»

Вы можете сделать это, чтобы обрезать любой произвольный фрагмент изображения.

Это то, что вы ищете?

...