У меня есть два изображения, которые мне нужно совместить.
Для 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
Однако, если я дважды назову эту функцию, второе изображение (круг) полностью покрывает прямоугольник, и, таким образом, я получаю фон холста вместо углов прямоугольника.
Я думаю, мне нужно объединить два изображения, а затем нарисовать их. Как мне это сделать?
Вы переопределяете свойство Background при втором вызове. Если вы добавите два изображения в свою сетку программно, это сработает. Изменить:
gr.Background = ib;
Для того, чтобы:
Image image = new Image();
image.Source = ib.ImageSource;
gr.Children.Add(image);
На самом деле вы можете просто обычную грид в вашем 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>