christ2702
christ2702

Reputation: 493

Merging 2 images using C#

I want to merge two pictures in my C# program. the first one is any picture in grayscale mode, and the second one is like in this picture: 2nd Picture

Both of the pictures/images have the same size, and this is my code:

Bitmap first = new Bitmap (picturebox1.image);
Bitmap second = new Bitmap (picturebox2.image);
Bitmap result = new Bitmap (first.width, first.height);
Graphics g = Graphics.FromImage(result);
g.DrawImageUnscaled(first, 0, 0);
g.Flush();
g.DrawImageUnscaled(second, 0, 0);
g.Flush();
picturebox3.image = result;

I can join those picture, but the result has smaller size than the two originals (both pictures have same size). Could anyone give me some suggestions?

Additionally, I want the result picture has condition like this : if the edge pixel in 2nd picture dropped to the bright side at the 1st one, it will be dark, otherwise when the edge dropped to the dark side, it will be bright (seem glow). so the text will be semi transparent.

Here's an example of the results I want.

Result

Could anyone give some suggestions please?

Upvotes: 2

Views: 14578

Answers (3)

qwr
qwr

Reputation: 3670

It was for joining

Bitmap first = new Bitmap (picturebox1.Image);
    Bitmap second = new Bitmap (picturebox2.Image);
    Bitmap result = new Bitmap (first.Width+first.Width, first.Height);
    Graphics g = Graphics.FromImage(result);
    g.DrawImageUnscaled(first, 0, 0);
    g.DrawImageUnscaled(second,first.Width, 0);

Try this for merging one on top another . set alpha by yourself ( red: U can use BitMap.MakeTransParent if u not want alpha)

        public Bitmap SetImageOpacity(Image image, float opacity)
        {
            try
            {
                //create a Bitmap the size of the image provided  
                Bitmap bmp = new Bitmap(image.Width, image.Height);

                //create a graphics object from the image  
                using (Graphics gfx = Graphics.FromImage(bmp))
                {

                    //create a color matrix object  
                    ColorMatrix matrix = new ColorMatrix();

                    //set the opacity  
                    matrix.Matrix33 = opacity;

                    //create image attributes  
                    ImageAttributes attributes = new ImageAttributes();

                    //set the color(opacity) of the image  
                    attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

                    //now draw the image  
                    gfx.DrawImage(image, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes);
                }
                return bmp;
            }
            catch (Exception ex)
            {

                return null;
            }
        } 
        private void button1_Click(object sender, EventArgs e)
        {
            Bitmap first = new Bitmap(pictureBox1.Image); 
            Bitmap second = SetImageOpacity(pictureBox2.Image, 0.5f);
            //Bitmap result = new Bitmap(first.Width, first.Height);
            //fix :
            Bitmap result = new Bitmap(Math.Max(first.Width,second.Width), Math.Max(first.Height,second.Height));
            Console.WriteLine(first.Width);
            Graphics g = Graphics.FromImage(result);
            g.DrawImageUnscaled(first, 0, 0);
            g.DrawImageUnscaled(second, 0, 0);
            pictureBox3.Image = result;
            result.Save("result.jpg" );
        }
    }
}

And Coming For watermark why not you want to use Drawstring with alpha here is article for all these http://www.codeproject.com/Articles/5034/How-to-implement-Alpha-blending

Upvotes: 5

Esteban Araya
Esteban Araya

Reputation: 29664

This codeproject article shows how to watermark an image with text as well as another image.

In summary, what you have to do is draw your watermark image over the image with the desired transparency.

Upvotes: 0

Freelancer
Freelancer

Reputation: 9074

You need to include the System.Drawing.Imaging namespace to make this code work.

Go through following code:

private void CombineImages(FileInfo[] files)
{
    //change the location to store the final image.
    string finalImage = @"C:\\MyImages\\FinalImage.jpg";
    List imageHeights = new List();
    int nIndex = 0;
    int width = 0;
    foreach (FileInfo file in files)
    {
        Image img = Image.FromFile(file.FullName);
        imageHeights.Add(img.Height);
        width += img.Width;
        img.Dispose();
    }
    imageHeights.Sort();
    int height = imageHeights[imageHeights.Count - 1];
    Bitmap img3 = new Bitmap(width, height);
    Graphics g = Graphics.FromImage(img3);
    g.Clear(SystemColors.AppWorkspace);
    foreach (FileInfo file in files)
    {
        Image img = Image.FromFile(file.FullName);
        if (nIndex == 0)
        {
            g.DrawImage(img, new Point(0, 0));
            nIndex++;
            width = img.Width;
        }
        else
        {
            g.DrawImage(img, new Point(width, 0));
            width += img.Width;
        }
        img.Dispose();
    }
    g.Dispose();
    img3.Save(finalImage, System.Drawing.Imaging.ImageFormat.Jpeg);
    img3.Dispose();
    imageLocation.Image = Image.FromFile(finalImage);
}

Follow Link:

http://www.niteshluharuka.com/2012/08/combine-several-images-to-form-a-single-image-using-c/

Upvotes: 0

Related Questions