Merge two images to create a single image in C#.Net

后端 未结 6 986
庸人自扰
庸人自扰 2020-12-13 14:00

I have a requirement wherein I need to merge two different png/jpeg images resulting into a single image using C#.Net. There will be a particular location defined on the sou

相关标签:
6条回答
  • 2020-12-13 14:16
    private void Merge _Click(object sender, EventArgs e)
    {
    }
    DirectoryInfo directory=new DirectoryInfo("D:\\Images");
    if(directory!=null)
    {
        FileInfo[]files = directory.GetFiles();
        MergeImages(Image);
    }
    
    private void MergeImages(FileInfo[] Image)
    {
        //change the location to store the final image.
        string FImage= @"D:\\Images\\FImage.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 NewImg = new Bitmap(width, height);
        Graphics Gr= Graphics.FromImage(NewImg);
        Gr.Clear(SystemColors.AppWorkspace);
        foreach (FileInfo file in files)
        {
            Image img = Image.FromFile(file.FullName);
            if (nIndex == 0)
            {
                Gr.DrawImage(img, new Point(0, 0));
                nIndex++;
                width = img.Width;
            }
            else
            {
                Gr.DrawImage(img, new Point(width, 0));
                width += img.Width;
            }
                img.Dispose();
        }
        Gr.Dispose();
        NewImg .Save(FImage, System.Drawing.Imaging.ImageFormat.Jpeg);
        NewImg .Dispose();
        imageLocation.Image = Image.FromFile(FImage);
    }
    
    0 讨论(0)
  • 2020-12-13 14:29

    After all this, I found a new easier method try this ..

    It can join multiple photos together:

    public static System.Drawing.Bitmap CombineBitmap(string[] files)
    {
        //read all images into memory
        List<System.Drawing.Bitmap> images = new List<System.Drawing.Bitmap>();
        System.Drawing.Bitmap finalImage = null;
    
        try
        {
            int width = 0;
            int height = 0;
    
            foreach (string image in files)
            {
                //create a Bitmap from the file and add it to the list
                System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(image);
    
                //update the size of the final bitmap
                width += bitmap.Width;
                height = bitmap.Height > height ? bitmap.Height : height;
    
                images.Add(bitmap);
            }
    
            //create a bitmap to hold the combined image
            finalImage = new System.Drawing.Bitmap(width, height);
    
            //get a graphics object from the image so we can draw on it
            using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(finalImage))
            {
                //set background color
                g.Clear(System.Drawing.Color.Black);
    
                //go through each image and draw it on the final image
                int offset = 0;
                foreach (System.Drawing.Bitmap image in images)
                {
                    g.DrawImage(image,
                      new System.Drawing.Rectangle(offset, 0, image.Width, image.Height));
                    offset += image.Width;
                }
            }
    
            return finalImage;
        }
        catch (Exception)
        {
            if (finalImage != null)
                finalImage.Dispose();
            //throw ex;
            throw;
        }
        finally
        {
            //clean up memory
            foreach (System.Drawing.Bitmap image in images)
            {
                image.Dispose();
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-13 14:31

    I have api for that at http://bookingbillboard.com/API. This api will combine 2 pictures. 1 picture is your images/design/poster, and other images is photo of billboard. by using API , you can see how your design/images/poster looks like in the photo of billboard

    0 讨论(0)
  • 2020-12-13 14:32

    This method merge two images one in the top of the other you can modify the code to meet for your needs:

        public static Bitmap MergeTwoImages(Image firstImage, Image secondImage)
        {
            if (firstImage == null)
            {
                throw new ArgumentNullException("firstImage");
            }
    
            if (secondImage == null)
            {
                throw new ArgumentNullException("secondImage");
            }
    
            int outputImageWidth = firstImage.Width > secondImage.Width ? firstImage.Width : secondImage.Width;
    
            int outputImageHeight = firstImage.Height + secondImage.Height + 1;
    
            Bitmap outputImage = new Bitmap(outputImageWidth, outputImageHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
    
            using (Graphics graphics = Graphics.FromImage(outputImage))
            {
                graphics.DrawImage(firstImage, new Rectangle(new Point(), firstImage.Size),
                    new Rectangle(new Point(), firstImage.Size), GraphicsUnit.Pixel);
                graphics.DrawImage(secondImage, new Rectangle(new Point(0, firstImage.Height + 1), secondImage.Size),
                    new Rectangle(new Point(), secondImage.Size), GraphicsUnit.Pixel);
            }
    
            return outputImage;
        }
    
    0 讨论(0)
  • 2020-12-13 14:32
            String jpg1 = @"c:\images.jpeg";
            String jpg2 = @"c:\images2.jpeg";
            String jpg3 = @"c:\image3.jpg";
    
            Image img1 = Image.FromFile(jpg1);
            Image img2 = Image.FromFile(jpg2);
    
            int width = img1.Width + img2.Width;
            int height = Math.Max(img1.Height, img2.Height);
    
            Bitmap img3 = new Bitmap(width, height);
            Graphics g = Graphics.FromImage(img3);
    
            g.Clear(Color.Black);
            g.DrawImage(img1, new Point(0, 0));
            g.DrawImage(img2, new Point(img1.Width, 0));
    
            g.Dispose();
            img1.Dispose();
            img2.Dispose();
    
            img3.Save(jpg3, System.Drawing.Imaging.ImageFormat.Jpeg);
            img3.Dispose();
    
    0 讨论(0)
  • 2020-12-13 14:37

    Disclaimer: I work at Atalasoft

    Our DotImage Photo SDK (which is free) can do this.

    To open an image

     AtalaImage botImage = new AtalaImage("bottomImage.png");
     AtalaImage topImage = new AtalaImage("topImage.png");
    

    To overlay one on top of another

     Point pos = new Point(0,0); // or whatever you need
     OverlayCommand cmd = new OverlayCommand(topImage, pos);
     ImageResults res = cmd.Apply(botImage);
    

    If you need the resulting image to be a different size, look at the CanvasCommand. You could also create an AtalaImage of the size you need, then overlay each image onto it.

    To save

     botImage.Save("newImage.png", new PngEncoder(), null);
    
    0 讨论(0)
提交回复
热议问题