Как наложить изображения в WPF?

1

У меня есть два изображения, которые мне нужно совместить.

Для ex- мне нужен сплошной круг поверх сплошного прямоугольника. Итак, я вижу весь круг, но только углы прямоугольника. Я не хочу, чтобы круг был прозрачным. Исходный circle.png НЕ имеет прямоугольную рамку. Его граница находится только по границам круга. Таким образом, в идеале, весь круг не должен перекрывать прямоугольник.

Это код для отображения изображения:

                BitmapImage src = new BitmapImage();
                src.BeginInit();
                src.UriSource = new Uri(imgpath, UriKind.Absolute);
                src.CacheOption = BitmapCacheOption.OnLoad;
                src.EndInit();
                ImageBrush ib = new ImageBrush(src);
                ib.Viewbox = new Rect(UVRectangle.X / src.PixelWidth, UVRectangle.Y / src.PixelHeight, UVRectangle.Width / src.PixelWidth, UVRectangle.Height / src.PixelHeight);
                gr.Background = ib; //gr is of type Grid

Однако, если я дважды назову эту функцию, второе изображение (круг) полностью покрывает прямоугольник, и, таким образом, я получаю фон холста вместо углов прямоугольника.

Я думаю, мне нужно объединить два изображения, а затем нарисовать их. Как мне это сделать?

Теги:
wpf
canvas

2 ответа

1
Лучший ответ

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

gr.Background = ib;

Для того, чтобы:

Image image = new Image();
image.Source = ib.ImageSource;  
gr.Children.Add(image);
  • 0
    Получение ошибки: он наилучшим образом соответствует перегруженному методу для 'System.Windows.Controls.UIElementCollection.Add (System.Windows.UIElement)' с некоторыми недопустимыми аргументами.
  • 0
    Аргумент 1: невозможно преобразовать из 'System.Windows.Media.ImageBrush' в 'System.Windows.UIElement'
Показать ещё 9 комментариев
2

На самом деле вы можете просто обычную грид в вашем XAML. Просто разместите 2 изображения внутри сетки. Они будут расположены друг над другом следующим образом:

<Grid>
        <Image Source="/ProjectName;component/Folder/Image1.png"
                                Width="24"
                                Height="24" />
        <!-- Image above Image1 -->
        <Image Source="/ProjectName;component/Folder/Image2.png"
                                Width="24"
                                Height="24" />
    </Grid>
  • 0
    Изображения могут меняться динамически. Итак, мне нужно сделать это в коде. Что-то вроде того, что предложил @Claudio
  • 0
    Вы все еще можете привязать источник данных к ImageSource, если количество изображений не меняется. В противном случае вы можете, конечно, использовать предложение Клаудио.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню