我正在使用AForge.video.dll
和AForge.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
{ }
}
答案 0 :(得分:0)
正如我在评论中提到的,您面临的问题似乎来自pictuebox.SizeMode
设置为Normal
这一事实。
来自MSDN:
默认情况下,在普通模式下,图像位于PictureBox的左上角,图像的任何太大而不能用于PictureBox的部分都会被剪切。使用< strong> StretchImage 值会导致图像拉伸或缩小以适合PictureBox。使用缩放值会使图像拉伸或缩小以适合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;
}