2017-02-11 2 views
0

Я использую AForge.video.dll и AForge.video.DirectShow.dll.Изображение, показанное в PictureBox, до того, как оно было снято, отличается и снято изображение другое

Я хочу сохранить точное изображение, которое отображается в PictureBox в момент захвата (pbPhoto является PictureBox я использовал для отображения видео камеры)

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

    private void btImage_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      photo = true; 

      if (!scanFlag) 
      { 
       btPrintPass.Enabled = false; 
       scanFlag = true;      

       cam = new VideoCaptureDevice(webcam[comboBox1.SelectedIndex].MonikerString); 
       cam.NewFrame += new NewFrameEventHandler(cam_NewFrame); 
       cam.Start(); 

       this.btImage.Text = "Stop Scan"; 
      } 
      else 
      { 
       btPrintPass.Enabled = true; 
       scanFlag = false;      

       if (cam.IsRunning) 
       { 
        cam.Stop(); 
       }    

       this.btImage.Text = "Scan Photo"; 
       string path = "temp.Jpeg"; 

       if (pbPhoto.Image != null) 
       { 
        pbPhoto.Image.Save(path, ImageFormat.Jpeg); 
        //this.pictureBox1.Image.Save(path,ImageFormat.Bmp) ; 
        FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); 
        //long Len = ss.Length ; 
        //this.pictureBox1.Image.Save(
        m_barrImg = new byte[Convert.ToInt32(fs.Length)]; 
        int iBytesRead = fs.Read(m_barrImg, 0, Convert.ToInt32(fs.Length)); 
        fs.Close(); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      LogError(ex.ToString()); 
     } 
     finally 
     { } 
    }  
+0

Как отличается от изображения, которого вы хотите? всего несколько кадров впереди? –

+0

Изображение с изображениями показано как увеличенное изображение, но после захвата изображения он выглядит так, будто изображение запечатлено слишком далеко – shridhar

+0

Тогда я подозреваю, что это свойство 'SizeMode' вашего' picturebox'. На что он настроен? –

ответ

0

Как я уже упоминал в своем комментарии, вопрос вы сталкиваетесь с тем, что pictuebox.SizeMode установлен в Normal. Из MSDN:

По умолчанию в обычном режиме , изображение будет расположено в верхнем левом углу PictureBox, и любая часть изображения, которая является слишком большой для PictureBox является clipped.Using Значение StretchImage заставляет изображение растягиваться или сжиматься, чтобы соответствовать PictureBox. Использование значения Zoom приводит к тому, что изображение растягивается или уменьшается, чтобы соответствовать PictureBox; однако соотношение сторон в оригинале сохраняется.

Так что если вы измените SizeMode на StretchImage или Zoom вы увидите в picturebox то же самое точное изображение.

Как бы то ни было, я бы также рекомендовал добавить следующую проверку на ваш cam_NewFrame, так как может случиться так, что до тех пор, пока камера не прекратит потоковое воспроизведение, вы переместите несколько кадров вперед.

void cam_NewFrame(object sender, NewFrameEventArgs eventArgs) 
{ 
    if (!scanFlag) return; 
    Bitmap bit = (Bitmap)eventArgs.Frame.Clone(); 
    pbPhoto.Image = bit; 
} 
+0

Спасибо Ofir Winegarten, его работа .... – shridhar

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