Можно вырезать изображение на основе формы другого изображения? - PullRequest
0 голосов
/ 14 января 2020

В Windows Presentation Foundation, я не могу найти способ вырезать изображение на основе формы другого изображения.

Например, я хотел бы показать чью-то фотографию в форма сердца.

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

Но действительно ли обрезка является единственным способом?

Может ли WPF наложить изображение поверх фигуры и вырезать изображение на основе размеров фигуры?

Код, который у меня есть, делает обратное того, что я пытаюсь сделать. То, что у меня есть, использует слой overlay в качестве маски для покрытия image:

<Image 
    Name="HeartOverlay"
    VerticalAlignment="Stretch"
    HorizontalAlignment="Stretch"
    Panel.ZIndex="2"
/>
<Canvas 
    Name="Canvas"
    HorizontalAlignment="Stretch"
    VerticalAlignment="Stretch">
    <Image 
        Name="Image"
        Stretch="Uniform"
        Panel.ZIndex="1"
    />
/>
HeartOverlay.Source = new Bitmap(@"C:\heart.png");
Image.Source = new Bitmap(@"C:\image.png");

Проблема здесь в том, что overlay объединяется с image и при сохранении / печати изображения также отображается оверлей.

См. изображение ниже в качестве примера. Обратите внимание на белые границы, которые особенно заметны при просмотре изображения в чем-то вроде приложения предварительного просмотра Ma c. Я хочу сохранить / распечатать изображение без белых полей.

Оценить любые указатели!

heart overlay with borders

1 Ответ

3 голосов
/ 14 января 2020

Вы можете просто заполнить путь с помощью геометрии в форме сердца с помощью ImageBru sh:

<Path Width="100" Height="150" Stretch="Uniform"
      Data="M1,2 L0,1 A0.5,0.5 1 1 1 1,0 A0.5,0.5 1 1 1 2,1 Z">
    <Path.Fill>
        <ImageBrush ImageSource="C:\image.png"/>
    </Path.Fill>
</Path>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...