抓取攝像頭圖片

unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, VfW, Clipbrd, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    AviPanel: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure capbmp;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  m_hCapWnd:Hwnd;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
   dwSize:Integer;
   setBmp : BITMAPINFO ;
begin
   try
      m_hCapWnd := capCreateCaptureWindow('',
        WS_CHILD or WS_VISIBLE,0,0,AviPanel.width,AviPanel.height,AviPanel.Handle,0);
                              //avipanel 就是你要顯示的視頻窗口的;可以是form ,panel等
                   //AviPanel.width就是顯示的寬度,AviPanel.height顯示的高度;
      if(capDriverConnect(m_hCapWnd,0)) then
      begin
        // capOverlay(m_hCapWnd,true);   //普通的攝像頭不能用overlay的方式 主意;
         capPreviewRate(m_hCapWnd,30);  //設置幀率爲30
         capPreview(m_hCapWnd,true);    // preview方式顯示
         dwSize:=capGetVideoFormatSize(m_hCapWnd);  
         capGetVideoFormat(m_hCapWnd,@setBmp, dwSize);
         setBmp.bmiHeader.biWidth:=352;    //這個就是設置你捕捉圖片的大小了 寬度 :)
         setBmp.bmiHeader.biHeight:=288; //這個就是設置你捕捉圖片的大小了 高度 :)
         capSetVideoFormat(m_hCapWnd,@setBmp,dwSize); 
      end;
   except
   end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin//定像
  capbmp;
end;

procedure TForm1.capbmp;
begin
  capEditCopy(m_hCapWnd);   //把圖像拷到剪貼板
  image1.Picture.Bitmap.LoadFromClipboardFormat(CF_BITMAP,Clipboard.GetAsHandle(CF_BITMAP), 0);
  // 這時在image1裏面的就是你需要的圖片
end;

end.
 

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