Introduction

這幾天看到論壇有人問到合併圖片的作法,直覺的想到了以前看過的歐大文章。人老了記憶不好就回去翻了一下順便復習。突然就蹦出了用FlowLayoutPanel控制項來實作的想法,順手做了個實驗並記錄一下。

使用FlowLayouyPanel控制項來合併大量圖片,純粹好玩、寫起來方便快速,可是可能會造成使用物件過多、記憶體用量過高等情況,效能方面也未做過比較,若要使用請自行評估仔細。

實作步驟

用FlowLayoutPanel控制項來合併大量圖片,基本上大概可分為下列幾步驟: 放入FlowLayoutPanel到表單,設定AutoSize屬性為True載入圖片時把圖片載入到PictureBox,設定Margin=new Padding(0)、SizeMode=AutoSize,並把PictureBox放入FlowLayoutPanel利用DrawToBitmap截取FlowLayoutPanel的畫面

完整程式範例 

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;

namespace WindowsFormsApplication5 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }

    private void button1_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK )
        {
            listBox1.Items.Clear();
            listBox1.Items.AddRange(openFileDialog1.FileNames);
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        flowLayoutPanel1.Controls.Clear();
        foreach(string file in listBox1.Items){
            flowLayoutPanel1.Controls.Add(new PictureBox() { Image = new Bitmap(file), SizeMode = PictureBoxSizeMode.AutoSize, Margin=new Padding(0)});
        }
    }

    private void button3_Click(object sender, EventArgs e)
    {
        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            Bitmap b = new Bitmap(flowLayoutPanel1.Width, flowLayoutPanel1.Height);
            flowLayoutPanel1.DrawToBitmap(b, flowLayoutPanel1.ClientRectangle);
            b.Save(saveFileDialog1.FileName );
        }
    }
}

}

操作步驟與執行結果

Step1.開啟程式,並按下[Load Photo]按鈕   Step2.選取圖片後按下[開啟]

程式會顯示所選取的所有圖片路徑

Step3.按下[合併]按鈕  合併完後會圖片會顯示在下方的FlowLayoutPanel區域

Step5.按下[Save]按鈕,在彈出的視窗選取存檔位置並按下儲存即可

儲存的檔案會像下面這樣合併完成

Download

 MergePhoto.zip 
 

.NET菜鳥自救會-[C#]大量圖片合併程式