首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 圖片拼合:水平與垂直方向合併多張影像為單一圖檔

     編輯:關於C#

應用場景

需將多張截圖、照片或掃描頁面拼成一張長圖(垂直)或寬圖(水平),常見於報表輸出、聊天記錄合併、全景圖拼接等需求。

列舉定義:合併方向

public enum ImageMergeOrientation
{
    Horizontal,  // 水平拼接:寬度累加,高度取最大
    Vertical     // 垂直拼接:高度累加,寬度取最大
}

核心合併邏輯

using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

private void CombineImages(FileInfo[] files, string outputPath, ImageMergeOrientation orientation = ImageMergeOrientation.Vertical)
{
    if (files == null || files.Length == 0) return;

    // 先載入所有影像計算總尺寸
    var images = files.Select(f => Image.FromFile(f.FullName)).ToArray();
    int totalWidth = orientation == ImageMergeOrientation.Horizontal
        ? images.Sum(img => img.Width)
        : images.Max(img => img.Width);
    int totalHeight = orientation == ImageMergeOrientation.Vertical
        ? images.Sum(img => img.Height)
        : images.Max(img => img.Height);

    // 建立畫布
    using (var finalBitmap = new Bitmap(totalWidth, totalHeight))
    using (var g = Graphics.FromImage(finalBitmap))
    {
        g.Clear(SystemColors.AppWorkspace); // 背景色

        int x = 0, y = 0;
        foreach (var img in images)
        {
            g.DrawImage(img, new Point(x, y));

            if (orientation == ImageMergeOrientation.Horizontal)
                x += img.Width;
            else
                y += img.Height;

            img.Dispose(); // 釋放來源影像資源
        }

        // 統一輸出為 TIFF(可依需求改為 PNG/JPEG)
        finalBitmap.Save(outputPath, ImageFormat.Tiff);
    }
}

尺寸計算邏輯說明

方向畫布寬度畫布高度拼貼座標遞增
水平所有影像寬度總和最大影像高度X 軸累加
垂直最大影像寬度所有影像高度總和Y 軸累加

較小的影像會靠左上角對齊,空白區域以 AppWorkspace 填充;若需置中或其他對齊方式,可自行調整 DrawImage 座標計算。

單元測試

[TestMethod]
public void Combine_Multiple_SampleImages_IntoOne()
{
    const string folder = @"C:\Users\Public\Pictures\Sample Pictures";
    var files = new DirectoryInfo(folder).GetFiles("*.jpg", SearchOption.TopDirectoryOnly);

    CombineImages(files, @"C:\FinalImage_H.tiff", ImageMergeOrientation.Horizontal);
    CombineImages(files, @"C:\FinalImage_V.tiff", ImageMergeOrientation.Vertical);
}

效果展示

縱向合併:

橫向合併:

參考資源

原文連結:https://www.bianceng.cn/Programming/csharp/201410/45751.htm

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved