【问题标题】:How can I overlay one image onto another?如何将一张图像叠加到另一张图像上?
【发布时间】:2011-01-29 13:33:06
【问题描述】:

我想显示由 两张 图像组成的图像。

我希望图像 rectangle.png 与图像 sticker.png 一起显示在它的 top 上,其 left-hand 像素 10、10 处的角。

这是我所知道的,但是如何组合图像?

Image image = new Image();
image.Source = new BitmapImage(new Uri(@"c:\test\rectangle.png"));
image.Stretch = Stretch.None;
image.HorizontalAlignment = HorizontalAlignment.Left;

Image imageSticker = new Image();
imageSticker.Source = new BitmapImage(new Uri(@"c:\test\sticker.png"));

image.OverlayImage(imageSticker, 10, 10); //how to do this?

TheContent.Content = image;

【问题讨论】:

    标签: c# wpf image image-processing overlay


    【解决方案1】:

    您可以将一个 Image 控件放在 View 中另一个 Image 控件的顶部。将两者都放入网格或画布中,然后将其中一个图像叠加在另一个图像之上。这也让您可以使用不透明度进行混合,效果非常好。

    如果您需要将它们放入同一张图片中,有几种选择....

    您可以从第一个图像中创建一个WritableBitmap,然后在第一个图像之上手动“绘制”其他图像像素。然后,这可以作为您在显示器中的图像的图像源。

    或者,您可以进行我上面提到的叠加,并将其渲染为RenderTargetBitmap。然后可以将其用作您的图像源。

    【讨论】:

      【解决方案2】:

      您需要一个面板来添加两个图像控件。 Grid 或 Canvas 将允许这样做,但我会使用 Grid,因为它会限制图像控件(从而适当地拉伸或收缩它们)。

      Image image = new Image();
      image.Source = new BitmapImage(new Uri(@"c:\test\rectangle.png"));
      image.Stretch = Stretch.None;
      image.HorizontalAlignment = HorizontalAlignment.Left;
      
      Image imageSticker = new Image();
      imageSticker.Source = new BitmapImage(new Uri(@"c:\test\sticker.png"));
      imageStiker.Margin = new Thickness(10, 10, 0, 0);
      
      Grid grid = new Grid();
      grid.Children.Add(image);
      grid.Children.Add(imageSticker);
      
      TheContent.Content = grid;
      

      【讨论】:

      • 太好了,这是我用的方法,只需要另外添加一个imageSticker.VerticalAlignment = VerticalAlignment.Top;
      • 这不是真正的覆盖。如果我想在按钮上使用组合图像怎么办?这行不通。
      • 为什么不呢? Button 绝对可以将该网格作为其内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多