public int BufferSize { get; }
public:
property int BufferSize {
int get();
}
The buffer size in bytes.
This property is set by upstream filters. This property is the maximum size of the buffer, whereas the ActualDataLength property contains the size occupied by the valid data. Use the ActualDataLength property to set the size of the valid data in the buffer. The size of the valid data buffer must not exceed the value reported by the MediaSample.BufferSize property. Assignment can raise an error exception. For more information, refer to the Error Codes.
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";
}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document