捕获前在PictureBox中显示的图像是不同的,捕获的图像是不同的



我正在使用AForge.video.dllAForge.video.DirectShow.dll

我想保存捕获时显示在图片框中的确切图像(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
        { }
    }      

正如我在评论中提到的,您面临的问题似乎来自pictuebox.SizeMode设置为Normal的事实。从 MSDN:

默认情况下,在"正常"模式下,图像位于图片框的左上角,并且图像中对于图片框来说太大的任何部分都将被剪裁。使用拉伸图像值会导致图像拉伸或收缩以适合图片框。使用缩放值会导致图像被拉伸或缩小以适合图片框;但是,保留了原件中的纵横比。

因此,如果您将SizeMode更改为StretchImageZoom您将在picturebox中看到完全相同的图像。

也就是说,我还建议您添加以下检查 到您的cam_NewFrame ,因为在相机实际停止流式传输之前,您可能会向前移动几帧。

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

相关内容

  • 没有找到相关文章

最新更新