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

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

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

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; } 

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

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

 public static System.Drawing.Bitmap CombineBitmap(string[] files) { //read all images into memory List images = new List(); 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(); } } } 

免责声明:我在Atalasoft工作

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

打开图像

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

将一个叠加在另一个上面

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

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

要保存

  botImage.Save("newImage.png", new PngEncoder(), null); 
  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();