public byte[] Buffer { get; }
public:
property array<byte>^ Buffer {
array<byte>^ get();
}
A byte array containing the media sample data.
The returned array allows direct read and write access to the sample buffer for in-process clients only (which is the typical case). Out-of-process clients should treat the returned array as read-only and should call the SetData method to write to the buffer.
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