2013-04-04 2 views
0

Я написал код для доступа к веб-камере и нажав, сохранив изображение в папку.Сохранение изображений с использованием Aforge

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; 
using AForge.Imaging; 
using AForge.Imaging.Filters; 
using AForge.Video; 
using AForge.Video.DirectShow; 

namespace cam 
{ 
public partial class Form1 : Form 
{ 
    public static Bitmap _latestFrame; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    private FilterInfoCollection webcam; 
    private VideoCaptureDevice cam; 
    Bitmap bitmap; 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     webcam = new FilterInfoCollection(FilterCategory.VideoInputDevice); 
     foreach (FilterInfo VideoCaptureDevice in webcam) 
     { 
      comboBox1.Items.Add(VideoCaptureDevice.Name); 

     } 
     comboBox1.SelectedIndex = 0; 
     } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     cam = new VideoCaptureDevice(webcam[comboBox1.SelectedIndex].MonikerString); 
     cam.NewFrame += new NewFrameEventHandler(cam_NewFrame); 
     cam.Start(); 

    } 
    void cam_NewFrame(object sender, NewFrameEventArgs eventArgs) 
    { 
     bitmap = (Bitmap)eventArgs.Frame.Clone(); 

     pictureBox1.Image = bitmap; 
    } 
    private void pictureBox1_Click(object sender, EventArgs e) 
    { 
     pictureBox1.Image = bitmap; 
    } 
    private void button3_Click(object sender, EventArgs e) 
    { 
     if (cam.IsRunning) 
     { 
      cam.Stop(); 
     } 

    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     Bitmap current = (Bitmap)_latestFrame.Clone(); 
     string ActiveDir = AppDomain.CurrentDomain.BaseDirectory; 
     string filepath = System.IO.Path.Combine(ActiveDir, @"D://picture/"); 
     if (!System.IO.Directory.Exists(filepath)) 
     { 
      System.IO.DirectoryInfo OutputDir = System.IO.Directory.CreateDirectory(filepath); 
      string fileName = System.IO.Path.Combine(filepath, @"name.bmp"); 
      if (!System.IO.File.Exists(fileName)) 
      { 
       current.Save(fileName); 
      } 
     } 
     current.Dispose(); 
    } 

    } 

    } 

В button2 я написал код для сохранения снимка, на создание программы, нулевая ссылка исключение, для данной линии (Bitmap current = (Bitmap)_latestFrame.Clone();)

+0

В приведенном выше коде '_latestFrame' никогда не присваивается никакого значения? –

+0

следует ли это указывать как null? – Aswathy

+0

Прежде чем вы сможете клонировать его, '_latestFrame' должен быть установлен на ненулевое значение. Насколько я могу видеть в вашем коде, '_latestFrame' никогда не устанавливается, и поэтому, когда вы вызываете' _latestFrame.Clone(), очевидно, будет выбрано исключение нулевой ссылки. –

ответ

1

Насколько я могу видеть в вашем код, новый кадр изображения копируется в вашу переменную-член bitmap. Статический член _latestFrame никогда не назначается.

Таким образом, в методе button2_Click, изменить первую строку на:

Bitmap current = (Bitmap)bitmap.Clone(); 

Теперь, если вы получили по меньшей мере, один кадр с веб-камеры при нажатии на кнопку, рама должна быть надлежащим образом сохранены.

Я также считаю, что вы перегружаете настройку filepath в методе button2_Click. Начнем с того, просто убедитесь, что изображение может быть надлежащим образом сохранены в активной директории, изменив метод button2_Click к этому:

private void button2_Click(object sender, EventArgs e) 
{ 
    Bitmap current = (Bitmap)bitmap.Clone(); 
    string filepath = Environment.CurrentDirectory; 
    string fileName = System.IO.Path.Combine(filepath, @"name.bmp"); 
    current.Save(fileName); 
    current.Dispose(); 
} 

Это гарантирует, что новый образ будет записан в «текущей директории» каждый раз, когда вы нажимаете на кнопку Capture.

Я проверил ваш код с вышеуказанными изменениями, и он работает безупречно.

+0

Я сделал изменение bt ничего не сохраняется в папке с картинками :-( – Aswathy

+0

См. Обновленный ответ для дополнительной информации. –

+0

Привет, сэр спасибо за поддержку. Я внес изменения, но текущий каталог может быть любым, мы можем указать это в определенную папку. Спасибо заранее – Aswathy

Смежные вопросы