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=4x4Bitmap 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:\test\testpdf2convert\";string[] path = System.IO.Directory.GetFiles(dictory);ImagePrintHp.MergedImage(path, SinglePageNumber.six, dictory);

  效果

2*2效果

?

轉載于:https://www.cnblogs.com/ProDoctor/p/7691575.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282127.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282127.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

硬盤基本知識(一)

總體來說&#xff0c;硬盤結構包括&#xff1a;盤片、磁頭、盤片主軸、控制電機、磁頭控制器、數據轉換器、接口、緩存等幾個部份。所有的盤片&#xff08;一般硬盤里有多個盤片&#xff0c;盤片之間平行&#xff09;都固定在一個主軸上。在每個盤片的存儲面上都有一個磁頭&…

MySQL - 存儲過程

一、概述 存儲過程可以理解為一段 SQL 語句的集合&#xff08;相當于 PHP 中的一個函數方法&#xff0c;去實現業務邏輯&#xff09;&#xff0c;它們被事先編譯好并且存儲在數據庫中。 調用存儲過程與直接執行 SQL 語句的效果是相同的&#xff0c;但是存儲過程的一個好處是處理…

白話聊應用架構

產業互聯網時代&#xff0c;數字化轉型&#xff08;數字化演化歷史&#xff09;已成為一種趨勢&#xff0c;各行各業都投入到數字化轉型的浪潮中來。節后有個客戶項目參與者問我架構方面的事情&#xff0c;我想來想去對于非IT人來說&#xff0c;可能應用架構是最容易理解&#…

python大數_python處理大數字的方法

本文實例講述了python處理大數字的方法。分享給大家供大家參考。具體實現方法如下&#xff1a;def getFactorial(n):"""returns the factorial of n"""if n 0:return 1else:k n * getFactorial(n-1)return kfor k in range(1, 70):print "…

數據庫分庫分表、讀寫分離的原理和實現,以及使用場景

2019獨角獸企業重金招聘Python工程師標準>>> 為什么要分庫分表和讀寫分離&#xff1f; 類似淘寶網這樣的網站&#xff0c;海量數據的存儲和訪問成為了系統設計的瓶頸問題&#xff0c;日益增長的業務數據&#xff0c;無疑對數據庫造成了相當大的負載&#xff0c;同時…

談談一些有趣的CSS題目(十六)-- 奇妙的 background-clip: text

開本系列&#xff0c;談談一些有趣的 CSS 題目&#xff0c;題目類型天馬行空&#xff0c;想到什么說什么&#xff0c;不僅為了拓寬一下解決問題的思路&#xff0c;更涉及一些容易忽視的 CSS 細節。 解題不考慮兼容性&#xff0c;題目天馬行空&#xff0c;想到什么說什么&#x…

第五周軟件工程作業-每周例行報告

一、PSP T名稱C內容ST開始時間ED結束時間中斷時間/min實際時間/minScrum會議第一次Scrum會議10月13日11:3010月13日12:10040第二次Scrum會議10月14日15:3010月14日15:55025第三次Scrum會議10月15日13:3010月15日14:05035第四次Scrum會議10月16日11:3010月16日13:00090第五次Scr…

MySQL - 觸發器

一、概述 Mysql 允許通過觸發器、存儲過程、函數的形式來存儲代碼。 觸發器可以讓你在執行 Insert、Update、Delete的時候&#xff0c;執行一些特定的操作。可以在Mysql中指定是在Sql語句執行之前觸發還是執行后觸發。 二、使用觸發器需要注意的點 對每一個表的每一個事件&a…

Docker Desktop 可以直接啟用Kubernetes 1.25 了

作為目前事實上的容器編排系統標準&#xff0c;K8s 無疑是現代云原生應用的基石&#xff0c;很多同學入門可能直接就被卡到第一關&#xff0c;從哪去弄個 K8s 的環境&#xff0c; Docker Desktop 自帶了Kubernetes 服務&#xff0c;但是在過往的經驗中就是用梯子也安裝不了&…

截取url的host_java正則表達式獲取url的host示例

java正則表達式獲取url的host示例 復制代碼 代碼如下: public static String getHost(String url){if(url==null||url.trim().equals("")){return ""; } String host = ""; Pattern p = Pattern.compile("(?<=//|)((\\w)+\\.)+\\w+&qu…

MySQL - 視圖

一、概述 Mysql 5.0 版本后開始引入視圖。視圖本身是一個虛擬表&#xff0c;不存放任何數據。在使用 sql 語句訪問視圖的時候&#xff0c;他返回的數據都是在查詢過程中從其他表動態生成的。 二、使用視圖   1、創建視圖 CREATE VIEW comic_view as SELECT comic_id,name,pe…

Linux環境下壓縮與解壓命令大全

tar命令 解包&#xff1a;tar zxvf FileName.tar 打包&#xff1a;tar czvf FileName.tar DirName gz命令 解壓1&#xff1a;gunzip FileName.gz 解壓2&#xff1a;gzip -d FileName.gz 壓縮&#xff1a;gzip FileName .tar.gz 和 .tgz 解壓&#xff1a;tar zxvf FileName.tar.…

Centos 磁盤管理及配額管理

實驗內容&#xff1a;一.添加兩塊硬盤&#xff0c;使用LVM做成VG01組&#xff0c;在該VG中新建兩個LV。二.將這兩個LV格式化為ext4/xfs&#xff0c;開機自動掛載到系統mnt1,mnt2目錄下。三.lv02開啟磁盤配額功能&#xff0c;用來進行用戶與組分配額的實驗。四.在系統里添加用戶…

OnionArch - 采用DDD+CQRS+.Net 7.0實現的洋蔥架構

博主最近失業在家&#xff0c;找工作之余&#xff0c;看了一些關于洋蔥&#xff08;整潔&#xff09;架構的資料和項目&#xff0c;有感而發&#xff0c;自己動手寫了個洋蔥架構解決方案&#xff0c;起名叫OnionArch。基于最新的.Net 7.0 RC1, 數據庫采用PostgreSQL, 目前實現了…

spark寫出分布式的訓練算法_利用 Spark 和 scikit-learn 將你的模型訓練加快 100 倍...

在 Ibotta&#xff0c;我們訓練了許多機器學習模型。這些模型為我們的推薦系統、搜索引擎、定價優化引擎、數據質量等提供動力。它們在與我們的移動應用程序交互時為數百萬用戶做出預測。當我們使用 Spark 進行數據處理時&#xff0c;我們首選的機器學習框架是 scikit-learn。隨…

理解LinkedHashMap

1. LinkedHashMap概述&#xff1a;LinkedHashMap是HashMap的一個子類&#xff0c;它保留插入的順序&#xff0c;如果需要輸出的順序和輸入時的相同&#xff0c;那么就選用LinkedHashMap。LinkedHashMap是Map接口的哈希表和鏈接列表實現&#xff0c;具有可預知的迭代順序。此實現…

MySQL - 鎖

一、什么是鎖 鎖是數據庫系統區別于文件系統的一個關鍵特性。鎖機制用于管理對共享資源的并發訪問。 二、MySQL 不同存儲引擎支持的鎖機制 存儲引擎支持的鎖類型Myisam表鎖Innodb行鎖、表鎖Memory表鎖BDB頁鎖、表鎖表鎖&#xff1a;直接鎖住的是一個表&#xff0c;開銷小&…

數據庫時區那些事兒 - MySQL的時區處理

原文地址 當JVM時區和數據庫時區不一致的時候&#xff0c;會發生什么&#xff1f;這個問題也許你從來沒有注意過&#xff0c;但是當把Java程序容器化的時候&#xff0c;問題就浮現出來了&#xff0c;因為目前幾乎所有的Docker Image的時區都是UTC。本文探究了MySQL及其JDBC驅動…

java_函數的重載

函數的重載&#xff08;Overload&#xff09;概念&#xff1a;在同一個類中&#xff0c;允許存在一個以上的同名函數&#xff0c;只要他們的參數個數或者參數類型不同即可。函數功能一樣&#xff0c;僅僅是參與運算的未知內同不同時&#xff0c;可以定義多函數&#xff0c;卻使…

全新升級的AOP框架Dora.Interception[2]: 基于約定的攔截器定義方式

Dora.Interception&#xff08;github地址&#xff0c;覺得不錯不妨給一顆星&#xff09;有別于其他AOP框架的最大的一個特點就是采用針對“約定”的攔截器定義方式。如果我們為攔截器定義了一個接口或者基類&#xff0c;那么攔截方法將失去任意注冊依賴服務的靈活性。除此之外…