←Select platform

Buffer Property

Summary

Gets a reference for direct access to the media sample buffer.

Syntax

C#
VB
C++
public byte[] Buffer { get; } 
Public ReadOnly Property Buffer As Byte() 
public: 
property array<byte>^ Buffer { 
   array<byte>^ get(); 
} 

Property Value

A byte array containing the media sample data.

Remarks

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.

Example

C#
VB
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["Logitech"] == null) 
         throw new Exception("No Logitech video device available"); 
 
      capturectrl.VideoDevices["Logitech"].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); 
   Marshal.Copy(ms.Buffer, 0, bmpData.Scan0, GetBitmapSize(bmp, vih.bmiHeader.biBitCount)); 
   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:\Program Files (x86)\LEAD Technologies\LEADTOOLS 19\Media"; 
} 
Imports Leadtools 
Imports Leadtools.Multimedia 
Imports LeadtoolsMultimediaExamples.Fixtures 
 
Public _result As Boolean = False 
Public _form As CaptureCtrlForm = New CaptureCtrlForm() 
 
Public Sub CaptureFrameExample() 
   ' reference the capture control 
   Dim capturectrl As CaptureCtrl = _form.CaptureCtrl 
 
   ' output file 
   Dim outFile As String = Path.Combine(LEAD_VARS.MediaDir, "CaptureCtrl_CaptureFrameExample.bmp") 
 
   Try 
      ' set the video capture device, use your capture device name here 
      If capturectrl.VideoDevices("Logitech") Is Nothing Then 
         Throw New Exception("No Logitech video device available") 
      End If 
 
      capturectrl.VideoDevices("Logitech").Selected = True 
 
      ' create a new sample target 
      Dim st As SampleTarget = New SampleTarget() 
 
      ' set the target media type for the video stream 
      Dim amt As MediaType = New MediaType() 
      amt.Type = Leadtools.Multimedia.Constants.MEDIATYPE_Video 
      amt.SubType = Leadtools.Multimedia.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) Then 
      End If 
 
      ' 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  
      Dim ms As MediaSample = st.GetSample(-1) 
 
      ' get the sample target's connected media type 
      Dim mt As MediaType = st.GetConnectedMediaType() 
 
      Dim bmp As Bitmap = WriteSampleBitmap(outFile, ms, mt) 
 
      ' stop the capture 
      capturectrl.StopCapture() 
 
      ' check for the capture file and set the result 
      If File.Exists(outFile) Then 
         Dim test As Image = Bitmap.FromFile(outFile) 
         _result = (test.Width = bmp.Width AndAlso test.Height = bmp.Height AndAlso test.PixelFormat = bmp.PixelFormat) 
      End If 
   Catch e1 As COMException 
      _result = False 
   Catch e2 As Exception 
      _result = False 
   End Try 
 
   ' 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. 
   Do While capturectrl.State = CaptureState.Running 
      Application.DoEvents() 
   Loop 
End Sub 
 
Private Function WriteSampleBitmap(ByVal outFile As String, ByVal ms As MediaSample, ByVal mt As MediaType) As Bitmap 
   ' get the video information  
   Dim vih As VideoInfoHeader = mt.GetVideoFormatData() 
 
   ' create a bitmap to hold the sample and copy it 
   Dim bmp As Bitmap = New Bitmap(vih.bmiHeader.biWidth, vih.bmiHeader.biHeight, FormatFromBitCount(vih.bmiHeader.biBitCount)) 
   Dim bmpData As BitmapData = bmp.LockBits(New Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat) 
   Marshal.Copy(ms.Buffer, 0, bmpData.Scan0, GetBitmapSize(bmp, vih.bmiHeader.biBitCount)) 
   bmp.UnlockBits(bmpData) 
 
   ' flip the upside down buffer 
   bmp.RotateFlip(RotateFlipType.Rotate180FlipX) 
 
   ' save the image 
   bmp.Save(outFile, ImageFormat.Bmp) 
   Return bmp 
End Function 
 
Private Function FormatFromBitCount(ByVal bitCount As Integer) As PixelFormat 
   Select Case 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 
   End Select 
   Throw New Exception("Unrecognized bit count") 
End Function 
 
Private Function GetBitmapSize(ByVal bmp As Bitmap, ByVal bitCount As Integer) As Integer 
   Dim pixelSize As Integer = CInt(Math.Log(CDbl(bitCount))) 
   Return (bmp.Width * pixelSize + pixelSize And (Not 3)) * bmp.Height 
End Function 
 
Private Function GetBitmapScanRowSize(ByVal bmpSize As Integer, ByVal stride As Integer, ByVal width As Integer) As Integer 
   Return CInt(bmpSize / (stride / width)) 
End Function 
 
Public Sub CaptureFrame_Helper(ByVal sender As Object, ByVal e As EventArgs) 
   ' set result 
   _result = True 
End Sub 
 
Public NotInheritable Class LEAD_VARS 
   Public Const MediaDir As String = "C:\Program Files (x86)\LEAD Technologies\LEADTOOLS 19\Media" 
End Class 

Requirements

Target Platforms

Help Version 19.0.2017.10.27
Products | Support | Contact Us | Copyright Notices
© 1991-2017 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Multimedia Assembly