合并两个图像以在C#.Net中创建单个图像

Ani*_*l C 24 .net c# image-manipulation

我有一个要求,其中我需要使用C#.Net将两个不同的png/jpeg图像合并成单个图像.将在源图像上定义特定位置,其中我需要插入另一图像.有人可以建议一些链接吗?

Jal*_*aid 37

此方法将两个图像合并在另一个的顶部,您可以修改代码以满足您的需求:

    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;
    }
Run Code Online (Sandbox Code Playgroud)


Ana*_*bhi 13

毕竟,我找到了一个新的更简单的方法试试这个..

它可以将多张照片连接在一起:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 真棒,感谢代码 - 但从不"扔出去" - 总是只是"扔".您正在重置堆栈,否则无法进行调试! (2认同)

Lou*_*nco 7

免责声明:我在Atalasoft工作

我们的DotImage Photo SDK(免费)可以做到这一点.

打开图像

 AtalaImage botImage = new AtalaImage("bottomImage.png");
 AtalaImage topImage = new AtalaImage("topImage.png");
Run Code Online (Sandbox Code Playgroud)

将一个叠加在另一个之上

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

如果您需要生成的图像大小不同,请查看CanvasCommand.您还可以创建所需大小的AtalaImage,然后将每个图像叠加到其上.

要保存

 botImage.Save("newImage.png", new PngEncoder(), null);
Run Code Online (Sandbox Code Playgroud)

  • 对不起 - 我不再在那里工作了.这个问题的其他答案应该对你有用. (4认同)

小智 5

        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();
Run Code Online (Sandbox Code Playgroud)