C#怎么将bitmap的图片拆分再合并

C#怎么将bitmap的图片拆分再合并
例如把bitmap的13579行拆分出来再合并到一个bitmap里面

先看一效果:

img

自定义行高的效果:

img

完整的示例代码我发布在了我的.NET社区问答栏目中《C#怎么将Bitmap的图片拆分再合并呢?》:

核心示例代码如下:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }

        private int _width;
        private int _height = 20;

        private string _imagePath = @"d:\tmp\2.jpg";

        private List<Image> SplitImage(string imagePath)
        {
            var imgArray = new List<Image>();
            var img = Image.FromFile(imagePath);
            var width = img.Width;
            var rows = img.Height / _height;
            for (var i = 0; i < rows * 2; i += 2)
            {
                var image = new Bitmap(width, _height);
                imgArray.Add(image);
                var graphics = Graphics.FromImage(image);
                graphics.DrawImage(img, new Rectangle(0, 0, width, _height), new Rectangle(0, i * _height, width, _height), GraphicsUnit.Pixel);
                graphics.Dispose();
            }

            return imgArray;
        }

        public Bitmap CombineBitmap(List<Image> images)
        {
            Bitmap finalImage = null;
            try
            {
                finalImage = new Bitmap(_width, images.Count * _height);
                using (var g = Graphics.FromImage(finalImage))
                {
                    g.Clear(Color.Transparent);
                    var offset = 0;
                    foreach (var image in images.Cast<Bitmap>())
                    {
                        g.DrawImage(image, new Rectangle(0, offset, image.Width, image.Height));
                        offset += image.Height;
                    }
                }

                return finalImage;
            }
            catch (Exception)
            {
                finalImage?.Dispose();
                throw;
            }
        }
    }
}