叠加两个不同类型的图像

时间:2011-08-01 10:30:44

标签: c# wpf image-processing bitmap drawing

我需要覆盖以下图片:

  1. System.Windows.Controls.Image image1
  2. System.Drawing.Bitmap image2;
  3. 我需要输出为System.Windows.Media.ImageSource类型。

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

1 个答案:

答案 0 :(得分: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渲染代码加速,但是我听说人们一直在努力强制渲染的位图不能立即输出到文件,所以如果你想要它在内存中而不加载再次提出这不是你最好的选择。

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