1

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

瞧,original_image现在上面有一个红色矩形。它实际上对于我的 30fps USB 相机来说已经足够快了,所以我可以实时获取它。

目前没有进行缩放。此外,它假设覆盖图像背景是白色的,这将是透明的。

4

2 回答 2

1

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

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

于 2009-05-22T17:41:06.177 回答
1

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

我可能会先尝试使用命令行版本(例如convertorcomposite命令),看看你是否可以让它们做你想做的事。如果可行,那么您应该能够使用他们的库实现相同的功能。

于 2009-05-22T17:54:14.643 回答