小歐ou | 菜鳥自救會

努力工作,用心學習
文章數 - 1007, 回應數 - 972, 引用數 - 0

每月文章

技術社群

技術部落格

社群之星-火箭隊

關於我

[C#]大量圖片合併程式

主要會撰寫這個程式的原因,在於看到藍色小舖上有一個問題一直都沒有人去解,問題是批次圖檔合併,對於此問題我還蠻有興趣的,隨即開始找了一些解決的方法,我的概念大概分成兩個部份

第一部分:將資料夾內要合併的圖檔名稱顯示於Listbox
在此部份,上網找了關於如何快速獲取檔案名稱的範例,很慶幸在章立民老師的網站看到此相關文章,有興趣的同學的可以去看看

Visual C# 2005 - 如何取得某目錄之下所有檔案名稱的字串集合
http://blog.xuite.net/alwaysfuturevision/liminzhang/8741076

第二部份:讀取與合併影像
在此部份,是透過 Bitmap 與 PictureBox 來完成
主要的流程如下
1. 把要合併影像,宣告為 Bitmap 陣列
2. 開一張新的畫布來存放要合併的影像,在本程式中,我是將影像橫向的串接合併,因此寬度為所有影像的寬度總和,
   高度的話我是找出最高的影像的高度值當作新畫布的高度。
3. 依序將要合併的影像加到新的 Bitmap 物件裡
4. 將合併結果顯示於PictureBox以及儲存成影像檔

以下為程式碼

 

01 using System;
02 using System.Collections.Generic;
03 using System.ComponentModel;
04 using System.Data;
05 using System.Drawing;
06 using System.Text;
07 using System.Windows.Forms;
08 using Microsoft.VisualBasic;
09 using Microsoft.VisualBasic.ApplicationServices;
10 using Microsoft.VisualBasic.CompilerServices;
11 using Microsoft.VisualBasic.Devices;
12 using Microsoft.VisualBasic.FileIO;
13 using Microsoft.VisualBasic.Logging;
14 using Microsoft.VisualBasic.MyServices;

15
16
17 namespace WindowsApplication2
18 {
19     public partial class Form1 : Form
20     {
21         public Form1()
22         {
23             InitializeComponent();
24         }

25
26         private void button1_Click(object sender, EventArgs e)
27         {
28             // 開啟pic1目錄內的檔案名稱,並且加入listBox1
29             Computer MyComputer = new Computer();
30             foreach(string FlagFileName in MyComputer.FileSystem.GetFiles(MyComputer.FileSystem.CurrentDirectory + @"/pic1"))
31             {
32         
33                  listBox1.Items.Add(FlagFileName);                
34             }

35         }

36
37         private void button2_Click(object sender, EventArgs e)
38         {
39             // 開啟pic2目錄內的檔案名稱,並且加入listBox2
40             Computer MyComputer = new Computer();
41             foreach (string FlagFileName in MyComputer.FileSystem.GetFiles(MyComputer.FileSystem.CurrentDirectory + @"/pic2"))
42             {
43
44                 listBox2.Items.Add(FlagFileName);
45             }

46         }

47
48         private void button3_Click(object sender, EventArgs e)
49         {
50             // 將要合併的圖檔檔名加入listbox3
51              listBox3.Items.Add(listBox2.SelectedItem.ToString());
52              listBox2.Items.RemoveAt(listBox2.SelectedIndex);
53         }

54
55         private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
56         {
57             // 當選擇listbox1內的檔名時,將圖show到pictureBox2
58             if (listBox2.SelectedIndex > -1)
59             {
60                 this.pictureBox2.ImageLocation = listBox2.SelectedItem.ToString();
61             }

62         }

63
64         private void button4_Click(object sender, EventArgs e)
65         {
66             // 合併圖檔
67             Bitmap[] Capture = new Bitmap[listBox3.Items.Count];   // 要合併的多張影像
68             int ImageW = 0;
69             int ImageH = 0;
70
71             for (int i = 0; i < listBox3.Items.Count; i++)
72             {
73                 Capture[i] = new Bitmap(listBox3.Items[i].ToString());
74                 ImageW += Capture[i].Width;
75                 if (Capture[i].Height > ImageH)
76                 {
77                     ImageH = Capture[i].Height;
78                 }

79                 
80             }

81
82             Bitmap x = new Bitmap(ImageW, ImageH + 400);
83             Graphics g = Graphics.FromImage(x);
84
85             int tempW = 0;
86             for (int i = 0; i < listBox3.Items.Count; i++)
87             {
88                 g.DrawImage(Capture[i], tempW, 0, Capture[i].Width, Capture[i].Height);
89                 tempW = tempW + Capture[i].Width ;
90
91             }

92             
93             pictureBox3.Image = x;
94             pictureBox3.Image.Save(@"./result.bmp");
95
96         }

97
98     }

99 }

 

 

執行結果



posted on 2009/2/11 20:42 1 人收藏 我要推薦 | 閱讀數 : 18053 訂閱

關連文章

Feedback

# re: [C#]大量圖片合併程式 回覆

不好意思,我照你的方式去做,可是怎麼弄都做不出來,可以方便給我程式嗎@@?
2009/12/31 下午 04:20 | 小宏

# re: [C#]大量圖片合併程式 回覆

To 小宏

您測試的過程中,有什麼錯誤訊息嗎?

2010/1/1 上午 08:58 | 小歐ou

# re: [C#]大量圖片合併程式 回覆

using Microsoft.VisualBasic;
using Microsoft.VisualBasic.ApplicationServices;
using Microsoft.VisualBasic.CompilerServices;
using Microsoft.VisualBasic.Devices;
using Microsoft.VisualBasic.FileIO;
using Microsoft.VisualBasic.Logging;
using Microsoft.VisualBasic.MyServices;

這幾行怪怪的
2010/1/1 上午 10:40 | 小宏

# re: [C#]大量圖片合併程式 回覆

您可能沒將Microsoft.VisualBasic實際加入參考
請在您的專案中,選擇方案總管,點選您的網站專案,選擇加入參考,並在.NET頁籤中下拉找到Microsoft.VisualBasic並按下確定。

2013/11/4 上午 11:45 | jiahuei

回應

標題
姓名
電子郵件 (將不會被顯示)
個人網頁
內容 
  登入後使用進階評論  
Please add 1 and 6 and type the answer here:

Powered by: