合并两个图像,一个是透明的

时间:2009-05-22 17:27:16

标签: .net c++ bitmap imaging

我有两个位图图像。一个包含用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);

Voilà,original_image现在有一个红色矩形。它实际上对我的30fps usb相机足够快,所以我可以实时获得它。

现在没有进行缩放。此外,它假设叠加图像背景为白色,将变为透明。

2 个答案:

答案 0 :(得分:1)

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

http://www.codeproject.com/KB/GDI-plus/alphafx.aspx

答案 1 :(得分:1)

值得关注的一个非常强大的库是ImageMagick。他们甚至有一个库的.NET端口。它可以做与透明度,形状和叠加相关的事情。

我可能会首先尝试使用command-line versions(例如convertcomposite命令),看看是否可以让它们按照您的意愿行事。如果可行,那么您应该能够使用他们的库实现相同的功能。