A Digital image is simply a multidimensional
array; this array contains numbers which represents the color of points in the
image. Therefore, we could easily amend this array easily and do whatever we
want with this array. This could include entering this array (Matrix) into a
mathematical function for making any amendments in it, or for encrypting the
image. Or in this article I will show you a method used in substituting two pixels from two images, for instance you could take a photo for you and place a
background of Evil tower behind you. The same technique used in movies, and in
the media.
What do we need?
We need to have two images, an image for Evil tower, and a personal image for
you with a plain color background (for simplicity). Make sure that the two
images have reasonable sizes to substitute them together. In the next articles I will
show you different methods of scaling of images.
Now let us move to the steps to write our program.
First you should determine the color components of the background of your
picture, please refer to
my previous article to see how to get the color component of a point. After
that make a nested for loop that traverses over the two images and replace the
selected color components of the background, with the color components of the
corresponding pixel in the Evil tower image.
Here is the code
Bitmap Pixelssubstitutions(Bitmap
PersonalImage, Bitmap EvilImage,
Color PlainColor)
{
Bitmap NewImage=PersonalImage;
for(int
i=0;i<NewImage.Height;i++)
for (int
j = 0; j < NewImage.Width; j++)
{
Color Pixel=NewImage.GetPixel(j,i);
if(Pixel==PlainColor)
{
NewImage.SetPixel(j,i,EvilImage.GetPixel(j,i));
}
}
return NewImage;
}
The Output
You can see that some pixels around my body is not replaced with the
corresponding Evil tower image, that is because not all plain background pixels
have the same exact color components there may be a slight difference, therefore
it is better to put a range in the color components selected pixel.
In the next article we will discuss several techniques of image scaling using
C#. Please feel free to contact me if you need anything concerning this topic.