我需要覆盖以下图片:
System.Windows.Controls.Image
image1 System.Drawing.Bitmap
image2; 我需要输出为System.Windows.Media.ImageSource
类型。
我想到了以下方法:将image2转换为Bitmap
并使用System.Drawing.Graphics
覆盖两个图像,但我不知道如何转换image2。
答案 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渲染代码加速,但是我听说人们一直在努力强制渲染的位图不能立即输出到文件,所以如果你想要它在内存中而不加载再次提出这不是你最好的选择。
第二个选项让您可以更好地控制图像的组合方式,但可能更慢。