2013-10-12 57 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(); 
    } 
} 
相关问题