2017-02-11 78 views
0

我使用AForge.video.dllAForge.video.DirectShow.dll捕獲前顯示在PictureBox中的圖像不同且捕獲的圖像不同

我想保存這是在拍攝時顯示的圖片框精確圖像(pbPhoto是我用來顯示相機的視頻圖片框)

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

picturebox圖像顯示爲像縮放圖像,但在捕獲圖像後,它看起來像是從太遠捕獲圖像 – shridhar

+0

然後我懷疑它是'picturebox'的'SizeMode'屬性。它是什麼? –

回答

0

正如我在我的評論中提到,這個問題您所面對的似乎來自pictuebox.SizeMode設置爲Normal這一事實。 從MSDN:

默認情況下,在正常模式,圖像定位在圖片框的左上角,這是太大的圖片框圖像的任何部分clipped.Using StretchImage值會導致圖像伸展​​或縮小以適應PictureBox。使用Zoom值會導致圖像被拉伸或收縮以適應PictureBox;但是,原稿的高寬比保持不變。如果你改變

所以SizeModeStretchImageZoom您將在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