C#图片合并拼接

今天有个漂亮的小学教师说,有什么办法可以快速合并两张图,让她的学生能看到两张图的对比。于是乎动手:

 

界面就不说了,仅仅只是工具

一个按钮选文件,一个合并方向

哈哈,为什么叫这么名,自己猜

 

按钮点击绑定openFileDialog1选文件,点击确认后执行合并

string[] rs = openFileDialog1.FileNames;//new string[]{ "C:\\Users\\Administrator\\Pictures\\1.jpg", "C:\\Users\\Administrator\\Pictures\\1.jpg" };
            //取得总宽度,总高度,最大的宽度,最高的高度来生成画布
            int IW = 0, IH = 0, MaxW = 0, MaxH = 0;

            //遍历选择的文件,进行统计
            for (int i = 0; i < rs.Length; i++)
            {
                Image image = Image.FromStream(new System.IO.MemoryStream(File.ReadAllBytes(rs[i])));
                IW += image.Width;
                IH += image.Height;
                if (image.Width > MaxW)
                {
                    MaxW = image.Width;
                }
                if (image.Height > MaxH)
                {
                    MaxH = image.Height;
                }
            }
            if (IW == 0 || IH == 0) return;//遍历完成后如果没有宽度或高度,说明没有文件
            Bitmap map;
            if (checkBox1.Checked)//判断是否横向合并
            {
                map = new Bitmap(IW, MaxH);//定义生成横向画布
            }
            else
            {
                map = new Bitmap(MaxW, IH);//定义生成画布,默认从上到下合并
            }
            
            Graphics g = Graphics.FromImage(map);//画布操作
            g.Clear(Color.White);//设置画布背景色
            int NowVal = 0;//记录已经绘制的位置
            for (int i = 0; i < rs.Length; i++)
            {
                Image image = Image.FromStream(new System.IO.MemoryStream(File.ReadAllBytes(rs[i])));//遍历图片
                if (checkBox1.Checked)
                {                    
                    g.DrawImage(image, NowVal, 0, image.Width, image.Height);//写到画布上
                    NowVal += image.Width;
                }
                else
                {
                    g.DrawImage(image, 0, NowVal, image.Width, image.Height);
                    NowVal += image.Height;
                }

            }
            //把画布内容保存到程序目录下,使用PNG格式保存,防止画质损耗
            map.Save(Application.StartupPath + "\\ylf.net.cn_" + GetTimeStamp() + ".png", System.Drawing.Imaging.ImageFormat.Png);
            MessageBox.Show("操作完成", "提示");  

测试图:默认垂直拼接

勾选横向拼接

版权声明:
作者:yanxi
链接:https://readyplayerone.cn/2021/05/26/ctphbpj.html
来源:头号玩家
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>