Welcome

首页 / 软件开发 / C# / C#中如何把多个图片合成为一个图片

C#中如何把多个图片合成为一个图片2014-10-12在一些场景中,需要把多个图片,合(拼)成为一张 ,合成效果示例:

纵向:

横向:

代码实现:

enum ImageMergeOrientation { Horizontal, Vertical }
private void CombineImages(FileInfo[] files, string toPath, ImageMergeOrientation mergeType = ImageMergeOrientation.Vertical){//change the location to store the final image.// URL:http://www.bianceng.cn/Programming/csharp/201410/45751.htmvar finalImage = toPath;var imgs = files.Select(f => Image.FromFile(f.FullName)); var finalWidth = mergeType == ImageMergeOrientation.Horizontal ?imgs.Sum(img => img.Width) :imgs.Max(img => img.Width); var finalHeight = mergeType == ImageMergeOrientation.Vertical ?imgs.Sum(img => img.Height) :imgs.Max(img => img.Height); var finalImg = new Bitmap(finalWidth, finalHeight);Graphics g = Graphics.FromImage(finalImg);g.Clear(SystemColors.AppWorkspace); var width = finalWidth;var height = finalHeight;var nIndex = 0;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;height = img.Height;}else{switch (mergeType){case ImageMergeOrientation.Horizontal:g.DrawImage(img, new Point(width, 0));width += img.Width;break;case ImageMergeOrientation.Vertical:g.DrawImage(img, new Point(0, height));height += img.Height;break;default:throw new ArgumentOutOfRangeException("mergeType");}}img.Dispose();}g.Dispose();finalImg.Save(finalImage, System.Drawing.Imaging.ImageFormat.Tiff);finalImg.Dispose();}
代码说明:

根据参数进行横向或纵向合并图片

如果为横向,图片高度为最高的那张;如果纵向则宽度为最宽的那张

UT 代码:

[TestMethod]public void Combine_Multiple_SampleImages_IntoOne(){const string folderPath = "C:\Users\Public\Pictures\Sample Pictures";var images = new DirectoryInfo(folderPath).GetFiles("*.jpg", SearchOption.TopDirectoryOnly); CombineImages(images, "C:/FinalImage_H.tiff");CombineImages(images, "C:/FinalImage_V.tiff", ImageMergeOrientation.Vertical);}