Merging 2 images using C#

13,070

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

Share:
13,070
christ2702
Author by

christ2702

I'm a programmer, a system analyst, a network administrator, a consultant, etc from Indonesia. I've graduated from University of Surabaya. My academic major is Computer Science with Artificial Intelligence concentration. I like to do some research about developing a program or just analyst my client's needed. I'm still a beginner who needs guidance and help from others who are more experienced. So please, don't hesitate to ask or help me, if I make a mistake. Thank you

Updated on June 04, 2022

Comments

  • christ2702
    christ2702 almost 2 years

    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?