【问题标题】:Overlay two images of different types叠加两张不同类型的图片
【发布时间】:2011-08-01 10:30:43
【问题描述】:

我需要叠加以下图片:

  1. System.Windows.Controls.Imageimage1
  2. System.Drawing.Bitmapimage2;

我需要输出类型为System.Windows.Media.ImageSource

我想到了以下方法:将image2转换为Bitmap并使用System.Drawing.Graphics覆盖这两个图像,但我不知道如何转换image2。

【问题讨论】:

  • 覆盖是什么意思..?一个图像在另一个图像的顶部..?
  • 使用 2 图像控制是否可以解决您的问题..?我的意思是向同一个网格添加 2 个图像控件将自动覆盖图像对..?
  • 我已经有这种方式了,但是我如何在覆盖后从网格中获取 imageSource?
  • 我试图建立一个样本来覆盖..但我没有图像来测试它..你能把图像发给我 bathineni.venkatesh@gmail.com 来测试我的代码跨度>
  • 嗯,我正在做的是一个大项目的一部分。 Image1 是作为文档的操作系统图标检索的,而 Image2 是从将图像保存为 DrawingImage 的 Xaml 检索的。为简单起见,您可以 google .png 图片并下载任意两张图片,将它们保存在本地,然后通过读取文件来使用它们。

标签: c# wpf image-processing bitmap drawing


【解决方案1】:

一个选项是按照上面的建议在网格中覆盖这两个项目,然后使用this technique 将控件呈现为位图文件。

或者,您可以将两个文件转换为位图并使用以下代码循环它们(此代码通过在 bitmap1 上分层 bitmap2 来组合图像,假设 bitmap2 中的任何白色值都是透明度值 - 您可以通过以下方式更改此混合条件改变一行):

Bitmap bitmap1;
Bitmap bitmap2;
Bitmap result;
for(int x = 0; x<bitmap1.Width;x++)
{
    for(int y=0; y<bitmap1.Height;y++)
    {
        //condition for choosing which pixel to pick - based on how you want to overlay them (this code assumes white is transparent)
        if(bitmap2.GetPixel(x,y) == Colors.White)
        {
            result.SetPixel(x,y) = bitmap.GetPixel(x,y);
        }
        else
        {
            result.SetPixel(x,y) = bitmap2.GetPixel(x,y);
        }
    }
}

这将为您提供位图结果,然后您可以随心所欲地使用它。

第一个选项更快,因为它由 WPF 渲染代码加速,但是我听说人们一直在努力强制渲染的位图不立即输出到文件中,所以如果你希望它在内存中而不加载再次提交文件,这不是您的最佳选择。

第二个选项让您可以更好地控制图像的组合方式,但可能会更慢。

【讨论】:

    猜你喜欢
    • 2019-11-10
    • 2012-07-11
    • 2016-04-25
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多