zoukankan      html  css  js  c++  java
  • C#合并文件夹图片列表 自定义排版顺序

    本次程序编写主要为了将pdf word等文档转换为图片后设置不同的打印排版

    前提 目标文件夹中的图片高宽都是一致的

            /// <summary>
            /// 合并图片
            /// </summary>
            /// <param name="savedictory">文件保存目录</param>
            /// <param name="singlePageNumber">单页排版</param>
            /// <param name="path">文件列表</param>
            /// 
            public static void MergedImage(string[] path, SinglePageNumber singlePageNumber,string savedictory)
            {
                //获取目录路径列表
                var i = path.Length % (int)singlePageNumber > 0 ? (path.Length / (int)singlePageNumber + 1) : path.Length / (int)singlePageNumber;
                for (int s = 0; s < i; s++)
                {
                    List<Bitmap> bitmapList = new List<Bitmap>();
                    List<string> imgPathTake = path.Skip((s - 1) * (int)singlePageNumber).Take((int)singlePageNumber).ToList();
                    foreach (var pathItem in imgPathTake)
                        bitmapList.Add(new Bitmap(pathItem));
                    //2=1x2 4=2x2 6=2x3 9=3x3 16=4x4
                    Bitmap map = null;
                    switch (singlePageNumber)
                    {
                        case SinglePageNumber.two:
                            map = mergeImage(2, 1, bitmapList);
                            break;
                        case SinglePageNumber.four:
                            map = mergeImage(2, 2, bitmapList);
    
                            break;
                        case SinglePageNumber.six:
                            map = mergeImage(3, 2, bitmapList);
    
                            break;
                        case SinglePageNumber.nine:
                            map = mergeImage(3, 3, bitmapList);
    
                            break;
                        case SinglePageNumber.Sixteen:
                            map = mergeImage(4, 4, bitmapList);
                            break;
                        default:
                            break;
                    }
                    map.Save(savedictory + "\" + s+".png");
                }
    
    
            }
            /// <summary>
            /// 合并图片文件 传入的图片宽高要一致
            /// </summary>
            /// <param name="wi">一排有几张</param>
            /// <param name="hi">一列有几张</param>
            /// <param name="mapList"></param>
            public static Bitmap mergeImage(int wi, int hi, List<Bitmap> mapList)
            {
    
                int width = mapList.First().Width;
                int height = mapList.First().Height;
                Bitmap bitmap = new Bitmap(width * wi, height * hi);
                //x表示图片在第几行y表示图片在第几列 
                int mapIndex = 0;
                for (int y = 1; y <= hi; y++)
                {
                    for (int x = 1; x <= wi; x++)
                {
                        if (mapIndex == mapList.Count )
                        {
                            foreach (var item in mapList)
                                item.Dispose();
                            return bitmap;
                        }
                        var map = mapList[mapIndex];
                        mapIndex++;
                        for (int w = 1; w <= width; w++)
                            for (int h = 1; h <= height; h++)
                            {
                                var color = map.GetPixel(w - 1, h - 1);
                                bitmap.SetPixel(((x-1)*width)+w - 1, ((y - 1) * height) + h - 1, color);
                            }
    
                    }
                }
                foreach (var item in mapList)
                    item.Dispose();
                return bitmap;
    
            }
    
        /// <summary>
        /// 每版打印几页 单页的不用处理
        /// </summary>
        public enum SinglePageNumber
    
        {
            two = 2,
            four = 4,
            six = 6,
            nine = 9,
            Sixteen = 16,
        }
    

      

      

    设置图片排版为2*3的效果

         string dictory = @"D:	est	estpdf2convert";
                string[] path = System.IO.Directory.GetFiles(dictory);
                ImagePrintHp.MergedImage(path, SinglePageNumber.six, dictory);
    

      效果

    2*2效果

  • 相关阅读:
    React Native组件左右两端展示(flex:1、justifyContent:'space-between')
    iOS 蓝牙开发详解(基本知识、相关类图、交互流程)
    iOS 蓝牙开发 Mac地址问题
    AFNetwork监听网络失效
    查看linux系统版本和cpu
    docker常用命令
    docker 常用命令--镜像删除
    docker部署nginx
    常见数据库会话查询脚本
    DB性能瓶颈分析思路
  • 原文地址:https://www.cnblogs.com/ProDoctor/p/7691575.html
Copyright © 2011-2022 走看看