C# 將多個Image 合成為一個,格式可選擇
在一些場景中,需要把多個圖片,合(拼)成為一張 ,合成效果示例:
縱向:
橫向:
程式碼實現:
enum ImageMergeOrientation
{
Horizontal,
Vertical
}
private void CombineImages(FileInfo[] files, string toPath, ImageMergeOrientation mergeType = ImageMergeOrientation.Vertical)
{
//change the location to store the final image.
var finalImage = toPath;
var imgs = files.Select(f => Image.FromFile(f.FullName));
var finalWidth = mergeType == ImageMergeOrientation.Horizontal ?
imgs.Sum(img => img.Width) :
imgs.Max(img => img.Width);
var finalHeight = mergeType == ImageMergeOrientation.Vertical ?
imgs.Sum(img => img.Height) :
imgs.Max(img => img.Height);
var finalImg = new Bitmap(finalWidth, finalHeight);
Graphics g = Graphics.FromImage(finalImg);
g.Clear(SystemColors.AppWorkspace);
var width = finalWidth;
var height = finalHeight;
var nIndex = 0;
foreach (FileInfo file in files)
{
Image img = Image.FromFile(file.FullName);
if (nIndex == 0)
{
g.DrawImage(img, new Point(0, 0));
nIndex++;
width = img.Width;
height = img.Height;
}
else
{
switch (mergeType)
{
case ImageMergeOrientation.Horizontal:
g.DrawImage(img, new Point(width, 0));
width += img.Width;
break;
case ImageMergeOrientation.Vertical:
g.DrawImage(img, new Point(0, height));
height += img.Height;
break;
default:
throw new ArgumentOutOfRangeException("mergeType");
}
}
img.Dispose();
}
g.Dispose();
finalImg.Save(finalImage, System.Drawing.Imaging.ImageFormat.Tiff);
finalImg.Dispose();
}
程式碼說明:
根據引數進行橫向或縱向合併圖片
如果為橫向,圖片高度為最高的那張;如果縱向則寬度為最寬的那張
UT 程式碼:
[TestMethod]
public void Combine_Multiple_SampleImages_IntoOne()
{
const string folderPath = "C:\\Users\\Public\\Pictures\\Sample Pictures";
var images = new DirectoryInfo(folderPath).GetFiles("*.jpg", SearchOption.TopDirectoryOnly);
CombineImages(images, "C:/FinalImage_H.tiff");
CombineImages(images, "C:/FinalImage_V.tiff", ImageMergeOrientation.Vertical);
}
相關文章
- 如何將一個pdf拆分為多個單頁pdf?
- rsscombine:將多個RSS源合併為一個源
- 使用simplemind如何選擇多個元素
- 使用 Python 把多個 MP4 合成一個視訊Python
- JavaScript將字串中的多個空格縮減為一個空格JavaScript字串
- 怎麼將ts檔案合成一個檔案
- 如何建立一個image
- 建立一個docker imageDocker
- Win10系統下怎麼將右鍵選單中的WinRAR選項合成一個選項Win10
- 因為你這個人,我選擇了這個公司
- API 開發中可選擇傳遞 token 介面遇到的一個坑API
- [20200326]為什麼選擇這個索引.txt索引
- Java中將多個Map扁平化為單個MapJava
- 選擇WEB前端開發,如何才能不成為一個碼農Web前端
- 在python中將多張圖片合成為視訊Python
- 將一個帶有main方法的jar生成為可執行jarAIJAR
- mysql 行格式選擇_Mysql 行格式MySql
- iOS 一個滑動選擇控制元件iOS控制元件
- MySQL innodb如何選擇一個聚簇索引MySql索引
- vue 手寫一個時間選擇器Vue
- C# 選擇排序C#排序
- 微信小程式--手寫一個地區選擇器(多級聯動)微信小程式
- 如何使用預覽將多個影像轉換為單個PDF
- Linux發行版本眾多,選擇哪個最合適?Linux
- cross-plateform 跨平臺應用程式-03-如果只選擇一個框架,應該選擇哪一個?ROSORM框架
- 2021個稅年度彙算:三種辦理方式可選擇
- AngularJS系列之select下拉選擇第一個選項為空白的解決辦法AngularJS
- Swoole 整合成一個小框架框架
- select下拉選擇第一個選項為空白、option無法選中的解決辦法,
- 在公鏈專案早期,為什麼PoW是一個更好選擇?
- javascript將字串中的多個空格替換為一個空格的正則例項JavaScript字串
- 以個性化為需求如何選擇ITSM系統?
- 一個工程的多個模組中的一個模組打包成jar在轉為.exe可執行檔案JAR
- 將一個Collection轉為陣列陣列
- 將maven專案劃分為多個模組Maven
- 自定義一個仿拼多多地址選擇器
- 如何快速實現一個顏色選擇器
- 一個很有意思的選擇表情DialogActivity
- openSUSE Leap 與 Tumbleweed,我該選擇哪一個