CaptureFrame Method (original) (raw)

Syntax

public virtual void CaptureFrame() 

public: virtual void CaptureFrame();

Example

using Leadtools; using Leadtools.Multimedia; using LeadtoolsMultimediaExamples.Fixtures; public bool _result = false; public CaptureCtrlForm _form = new CaptureCtrlForm(); public void CaptureFrameExample() { // reference the capture control CaptureCtrl capturectrl = _form.CaptureCtrl; // output file string outFile = Path.Combine(LEAD_VARS.MediaDir, "CaptureCtrl_CaptureFrameExample.bmp"); try { // set the video capture device, use your capture device name here if (capturectrl.VideoDevices["USB"] == null) throw new Exception("No USB video device available"); capturectrl.VideoDevices["USB"].Selected = true; // create a new sample target SampleTarget st = new SampleTarget(); // set the target media type for the video stream MediaType amt = new MediaType(); amt.Type = Constants.MEDIATYPE_Video; amt.SubType = Constants.MEDIASUBTYPE_RGB24; st.SetAcceptedMediaType(amt); // assign the sample target to the capture control capturectrl.TargetObject = st; capturectrl.TargetFormat = TargetFormatType.AVI; // prepare the manual frames capture capturectrl.ReadyCapture(CaptureMode.ManualFrames); // do something before the capture starts if (capturectrl.IsModeAvailable(CaptureMode.ManualFrames)) { } // set the capture mode to manual frames capturectrl.StartCapture(CaptureMode.ManualFrames); // capture a frame capturectrl.CaptureFrame(); // create a media sample using the captured sample from above MediaSample ms = st.GetSample(-1); // get the sample target's connected media type MediaType mt = st.GetConnectedMediaType(); Bitmap bmp = WriteSampleBitmap(outFile, ms, mt); // stop the capture capturectrl.StopCapture(); // check for the capture file and set the result if (File.Exists(outFile)) { Image test = Bitmap.FromFile(outFile); _result = (test.Width == bmp.Width && test.Height == bmp.Height && test.PixelFormat == bmp.PixelFormat); } } catch (COMException) { _result = false; } catch (Exception) { _result = false; } // we'll loop on the state and pump messages for this example. // but you should not need to if running from a Windows Forms application. while (capturectrl.State == CaptureState.Running) Application.DoEvents(); } private Bitmap WriteSampleBitmap(string outFile, MediaSample ms, MediaType mt) { // get the video information VideoInfoHeader vih = mt.GetVideoFormatData(); // create a bitmap to hold the sample and copy it Bitmap bmp = new Bitmap(vih.bmiHeader.biWidth, vih.bmiHeader.biHeight, FormatFromBitCount(vih.bmiHeader.biBitCount)); BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat); int bitmapSize = GetBitmapSize(bmp, vih.bmiHeader.biBitCount); if(bitmapSize <= ms.BufferSize) Marshal.Copy(ms.Buffer, 0, bmpData.Scan0, bitmapSize); bmp.UnlockBits(bmpData); // flip the upside down buffer bmp.RotateFlip(RotateFlipType.Rotate180FlipX); // save the image bmp.Save(outFile, ImageFormat.Bmp); return bmp; } private PixelFormat FormatFromBitCount(int bitCount) { switch (bitCount) { case 8: return PixelFormat.Format8bppIndexed; case 16: return PixelFormat.Format16bppRgb555; case 32: return PixelFormat.Format32bppRgb; case 48: return PixelFormat.Format48bppRgb; case 24: return PixelFormat.Format24bppRgb; } throw new Exception("Unrecognized bit count"); } private int GetBitmapSize(Bitmap bmp, int bitCount) { int pixelSize = (int)Math.Log((double)bitCount); return (bmp.Width * pixelSize + pixelSize & ~3) * bmp.Height; } private int GetBitmapScanRowSize(int bmpSize, int stride, int width) { return bmpSize / (stride / width); } public void CaptureFrame_Helper(object sender, EventArgs e) { // set result _result = true; } static class LEAD_VARS { public const string MediaDir = @"C:\LEADTOOLS23\Media"; }