将两个图像合并为一个透明图像
问题描述:
我有两个位图图像。其中一张包含使用USB相机拍摄的照片。另一个将包含一个形状,像一个rectagle,但它也可以是一个梯形,或者可以说是一个只有一种颜色的随机形状。现在剩下的图像是白色的。将两个图像合并为一个透明图像
两个图像是不一样的尺寸,但缩放算法这里不是最困难的部分,所以让我们假设它们是完全一样的尺寸。
我想表明我的USB摄像头图像的形状。白色部分将被视为透明的组合目的。现在我正在考虑按像素编辑图像像素,但是我正在寻找一个可以帮我实现的API。
所以,如果我拍张照片,在它的中间有房覆盖红色rectagle,生成的图像将与周围的房子一个红色矩形原始图片。
我正在使用.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相机来说实际上足够快,所以我可以实时获取它。
目前没有缩放比例。此外,它假定叠加图像背景是白色的,这将变得透明。
答
如果您使用的是完整的.NET平台,System.Drawing.Imaging具有Alpha通道和遮蔽函数:
答
一个值得看的相当稳健库ImageMagick。他们甚至有一个库的.NET端口。它可以做与透明度,形状和叠加有关的事情。
我可能会尝试先使用command-line versions(例如,convert
或composite
命令),看看您是否可以让它们按照您的要求做。如果可行,那么你应该能够使用他们的库来实现相同的功能。
Alpha通道或位图掩码? – 2009-05-22 17:37:20