2009-05-22 12 views
1

J'ai deux images bitmap. L'un contient une photo prise avec une caméra USB. L'autre contiendra une forme, comme une rectagule, mais il peut aussi s'agir d'un trapèze, ou disons, d'une forme aléatoire avec une seule couleur. Le reste de l'image est blanc en ce moment.Combiner deux images dont une est transparente

Les deux images ne sont pas de la même taille, mais les algorithmes d'échelle ne sont pas la partie la plus difficile ici, laisse supposer qu'ils sont exactement les mêmes dimensions.

Je veux montrer ma forme sur l'image de la caméra USB. La partie blanche sera considérée comme transparente pour la combinaison. En ce moment je pense à éditer l'image pixels par pixels, mais je cherche une API qui va le faire pour moi.

Donc, si je prends une photo avec une maison au milieu de celui-ci et la superposition d'un rectagle rouge, l'image résultante aura l'image d'origine avec un rectangle rouge autour de la maison.

J'utilise .NET si cela peut aider. Je pourrais aussi utiliser l'API win32 si elle contient des fonctions utiles.

Edit: Je accepté la réponse car il m'a mis sur la bonne voie. C'est vraiment super facile à faire.

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 a maintenant un rectangle rouge dessus. Il est en fait assez rapide pour mon appareil photo USB 30fps afin que je puisse l'obtenir en temps réel.

Il n'y a pas mise à l'échelle fait en ce moment. En outre, il suppose que l'arrière-plan de l'image de superposition est blanc, ce qui sera rendu transparent.

+1

Masque Alpha ou masque Bitmap? –

Répondre

1

Une bibliothèque assez robuste est intéressant de regarder ImageMagick. Ils ont même un port .NET de la bibliothèque. Il peut faire des choses liées à la transparence, aux formes et à la superposition.

Je pourrais essayer d'utiliser d'abord la commande command-line versions (la commande convert ou composite, par exemple) pour voir si vous pouvez les faire faire ce que vous voulez. Si cela fonctionne, alors vous devriez être en mesure d'implémenter cette même fonctionnalité en utilisant leurs bibliothèques.

Questions connexes