У меня есть два растровых изображения. Один содержит снимок, сделанный с помощью 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
теперь имеет красный прямоугольник над ним. Это на самом деле достаточно быстро для моей USB-камеры со скоростью 30 кадров в секунду, поэтому я могу получить ее в режиме реального времени.
Сейчас масштабирование не выполняется. Кроме того, предполагается, что фон наложенного изображения белый, что будет прозрачным.