C#捕捉視頻頭(源碼)-

using System;
using System.Runtime.InteropServices;

namespace Wuyin.ShoesManager
{
    
/// 
    
/// VedioCapture 的摘要說明。
    
/// 

    public class VedioCapture
    
{
        
private int hCaptureM;
        
private bool isUnLoad = false;
        
public VedioCapture()
        
{        
        }

        [DllImport(
"avicap32.dll")]
        
private static extern int capCreateCaptureWindow( string strWindowName, int dwStyle, int x, int y ,int width, int height , int hwdParent, int nID );
        [DllImport(
"user32.dll")]
        
private static extern int SendMessage( int hwnd , int wMsg, int wParam , int lParam );
        [DllImport(
"user32.dll")]
        
private static extern int SendMessage( int hwnd , int wMsg, int wParam , string lParam );
        [DllImport(
"Kernel32.dll")]
        
private static extern bool CloseHandle( int hObject );
        
public bool Initialize( System.Windows.Forms.Control aContainer , int intWidth, int intHeight )
        
{
            hCaptureM 
= capCreateCaptureWindow( ""0x40000000 | 0x100000000,0,intWidth,intHeight,aContainer.Handle.ToInt32() ,1 );
            
if( hCaptureM == 0 ) return false;
            
            
int ret = SendMessage( hCaptureM , 10340,0 );
            
if( ret == 0 )
            
{
                CloseHandle(hCaptureM);
                
return false;
            }

            
//WM_CAP_SET_PREVIEW
            ret = SendMessage( hCaptureM, 107410 );
            
if( ret == 0 )
            
{
                
this.UnLoad();
                
return false;
            }

            
//WM_CAP_SET_SCALE
            ret = SendMessage( hCaptureM, 107710 );
            
if( ret == 0 )
            
{
                
this.UnLoad();
                
return false;
            }

            
//WM_CAP_SET_PREVIEWRATE
            ret = SendMessage( hCaptureM, 1076660 );
            
if( ret == 0 )
            
{
                
this.UnLoad();
                
return false;
            }

            
return true;
        }


        
public void SingleFrameBegin()
        
{
            
//
            int ret = SendMessage( hCaptureM, 1094 , 00 );
        }

        
public void SingleFrameEnd()
        
{
            
//
            int ret = SendMessage( hCaptureM, 1095 , 00 );
        }


        
public void SingleFrameMode()
        
{
            
//WM_CAP_GRAB_FRAME
            int ret = SendMessage(  hCaptureM, 1084 , 00 );
            
//WM_CAP_SET_PREVIEW 
            
//int ret = SendMessage(  hCaptureM, 1074 , 0, 0 );
            
//WM_CAP_SINGLE_FRAME
            
//ret = SendMessage( hCaptureM, 1096 , 0, 0 );
        }

        
public void PreviewMode()
        
{
            
int ret = SendMessage( hCaptureM, 1074 , 10 );
        }
        

        
public void UnLoad()
        
{
            
int ret = SendMessage( hCaptureM, 103500 );
            CloseHandle( 
this.hCaptureM );
            isUnLoad 
= true;
        }


        
public void CopyToClipBorad()
        
{
            
int ret = SendMessage(  hCaptureM, 105400 );
        }


        
public void ShowFormatDialog()
        
{
            
int ret = SendMessage(  hCaptureM, 106500 );
        }

        
public void SaveToDIB( string fileName )
        
{
            
int ret = SendMessage(  hCaptureM, 10490, fileName );
        }


        
public void ShowDisplayDialog()
        
{
            
int ret = SendMessage( hCaptureM, 106700 );
        }

        
public System.Drawing.Image getCaptureImage()
        
{
            System.Windows.Forms.IDataObject iData 
= System.Windows.Forms.Clipboard.GetDataObject();
            System.Drawing.Image retImage 
= null;
            
if( iData !=  null ) 
            
{
                
if( iData.GetDataPresent( System.Windows.Forms.DataFormats.Bitmap ) )
                
{
                    retImage 
= (System.Drawing.Image)iData.GetData( System.Windows.Forms.DataFormats.Bitmap );
                }
 
                
else if( iData.GetDataPresent( System.Windows.Forms.DataFormats.Dib  ) )
                
{
                    retImage 
= (System.Drawing.Image)iData.GetData( System.Windows.Forms.DataFormats.Dib );
                }

            }

            
return retImage;
        }


        
~VedioCapture()
        
{
            
if!isUnLoad )
            
{
                
this.UnLoad();
            }

        }

    }

}


 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章