.net 组合两个图像,其中一个是透明的

.net 组合两个图像,其中一个是透明的,.net,c++,bitmap,imaging,.net,C++,Bitmap,Imaging,我有两个位图图像。其中一个包含一张用usb摄像头拍摄的照片。另一个将包含一个形状,如矩形,但它也可以是梯形,或者说,一个只有一种颜色的随机形状。图像的其余部分现在是白色的 这两幅图像的大小不一样,但缩放算法并不是这里最困难的部分,所以让我们假设它们的尺寸完全相同 我想在usb摄像头图片上显示我的形状。白色部分将被视为是透明的。现在我正在考虑一个像素一个像素地编辑图像,但我正在寻找一个API,它可以帮我完成这项工作 所以,如果我在房子中间拍一张照片,并覆盖一个红色的矩形,得到的图像将有一个红色的矩

我有两个位图图像。其中一个包含一张用usb摄像头拍摄的照片。另一个将包含一个形状,如矩形,但它也可以是梯形,或者说,一个只有一种颜色的随机形状。图像的其余部分现在是白色的

这两幅图像的大小不一样,但缩放算法并不是这里最困难的部分,所以让我们假设它们的尺寸完全相同

我想在usb摄像头图片上显示我的形状。白色部分将被视为是透明的。现在我正在考虑一个像素一个像素地编辑图像,但我正在寻找一个API,它可以帮我完成这项工作

所以,如果我在房子中间拍一张照片,并覆盖一个红色的矩形,得到的图像将有一个红色的矩形围绕房子的原始图片。

如果这有帮助的话,我正在使用.NET。如果win32 API包含一些有用的函数,我也可以使用它

编辑: 我接受了这个答案,因为它使我走上了正确的道路。这实际上非常容易做到

Bitmap^ overlay_image = gcnew Bitmap("overlay.bmp");
Bitmap^ original_image = gcnew Bitmap("original.bmp");
overlay_image->MakeTransparent(Color::White);
Graphics^ g_original = Graphics::FromImage(original_image);
g_original->DrawImage(overlay_image, 0, 0);
瞧,
原始图像
上现在有一个红色矩形。它实际上足够快,我的30帧usb摄像头,所以我可以得到它在实时


现在没有进行缩放。此外,它假定覆盖图像背景为白色,这将变得透明。

如果您使用的是完整的.NET平台,System.Drawing.Imaging具有alpha通道和遮罩功能:


一个非常健壮的库值得一看。他们甚至有一个.NET的图书馆端口。它可以做与透明度、形状和叠加相关的事情


我可能会尝试使用第一个命令(例如,
convert
composite
命令),看看您是否可以让它们执行您想要的操作。如果这样做有效,那么您应该能够使用它们的库实现相同的功能。

Alpha通道或位图掩码?