2013-10-12 55 views
1

我想使用for循環將圖像保存到文件夾C:\ Users \ crowds \ Documents \ Example中。 ,我也想這樣保存名稱: Sample.jpg,Sample1.jpg使用for循環將圖像保存在文件夾中

任何想法我怎麼能實現它?

這裏是我的代碼片段:

private void button4_Click(object sender, EventArgs e) 
    { 
     var capture = new Emgu.CV.Capture(); 

     using (var ImageFrame = capture.QueryFrame()) 
     { 
      if (ImageFrame != null) 
      { 
       pictureBox1.Image = ImageFrame.ToBitmap(); 
       ImageFrame.Save(@"C:\Users\crowds\Documents\Example\Sample.jpg"); 

      } 
      _capture.Dispose(); 
     } 
+0

我認爲所有下面的答案是正確的(不知道'i'被自動強制轉換爲字符串,也許一些問題的答案應該糾正這一點,手動投'i' )。我在這裏看到的唯一問題是,如果有任何機會存在名稱,例如'sample6.jpg'由於某種原因已經存在,並且您想嘗試將名稱更改爲'sample7。jpg',在這種情況下,您必須做得比我在下面的答案中看到的要多一點,但是您最好說明這種情況是否可行。 – Leron

+0

我想要做的是如果我點擊按鈕,圖像將保存爲sample0.jpg,如果我再次單擊該按鈕,名稱應該是sample1.jpg –

+0

根據您的評論我更新了我的答案。 – codemonkeh

回答

0

嘗試

string root="C:\Users\crowds\Documents\Example\Sample"; 
for(int i=0;i<value;i++) 
{ 
    string path=root+i+".jpg"; ImageFrame.Save(path); 
} 

和更好的調試等等。

+0

我想要做的是如果我點擊按鈕,圖像將保存爲sample0.jpg ,如果我再次單擊按鈕,名稱應爲sample1.jpg .. –

+0

for(int i = 0; i Anand

+0

如果它適合您,請將其標記爲答案。 – Anand

1

你可以試試這個是這樣的:

List<Image> imageList = //Get all the image list 
for(i=0; i<imageList.Count;i++) 
{ 
    ImageFrame.Save(@"C:\Users\crowds\Documents\ExampleSample"+i.toString()+".jpg");   
} 
0

基於您的評論,如果你只是想只是保存到不同的文件名每次你可以這樣做時間:

private int filenumber = 0; 

private void button4_Click(object sender, EventArgs e) 
{ 
    using (var capture = new Emgu.CV.Capture()) 
    using (var ImageFrame = capture.QueryFrame()) 
    { 
     if (ImageFrame != null) 
     { 
      pictureBox1.Image = ImageFrame.ToBitmap(); 
      ImageFrame.Save(String.Format(@"C:\Users\crowds\Documents\Example\Sample{0}.jpg", filenumber++));  
     } 
    } 
} 

注該代碼只是不檢查文件的存在,並且如果它已經存在,可能會拋出異常。理想情況下,您應該首先使用File.Exists(...)

0

EMGU CV庫從捕獲設備創建捕獲圖像,然後無論您喜歡如何管理它。你的例子試圖在一個按鈕按下時保存圖像,而不是迭代圖像集合。

你可能想要看的是你維護的counter mechanism。例如,當您按下按鈕或在應用程序初始化時,您可以閱讀包含圖像的directory並解析名稱以確定最後保存的圖像的名稱。獲取圖像名稱的number部分並使用它來初始化您的counter,然後每次按下按鈕以保存圖像時,增加計數器。

簡化下面的例子:

計數器

private int lastSaveCount = 0; 

這需要在某個地方你都活動Button_Click初始化計數器下面機制可以訪問。

初始化計數器

var files = Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Example\", @"Sample*.jpg").ToList(); 
foreach (var file in files) 
{ 
    var split = Regex.Split(file, @"[a-zA-Z]{1,}([\d]{1,}).jpg", RegexOptions.IgnoreCase); 
    var save = 0; 
    if (Int32.TryParse(split[1], out save)) 
    { 
     lastSaveCount = save > lastSaveCount ? save : lastSaveCount; 
    } 
} 

將上述地方爲宜。

按鈕按下

private void button4_Click(object sender, EventArgs e) 
{ 
    var capture = new Emgu.CV.Capture(); 

    using (var ImageFrame = capture.QueryFrame()) 
    { 
     if (ImageFrame != null) 
     { 
      lastSaveCount++; 
      pictureBox1.Image = ImageFrame.ToBitmap(); 
      var filename = string.Format(@"C:\Users\crowds\Documents\Example\Sample{0}.jpg", lastSaveCount); 
      ImageFrame.Save(filename); 

     } 
     _capture.Dispose(); 
    } 
} 
相關問題