컴퓨터에 카메라가 있습니까? 다른 사람들이 QQ를 가지고 노는 것을 볼 때 그것을 달성하는 방법에 대해 생각하십니까?
여기에서 우리는 델파이를 사용하여 MS Avicap32.dll을 사용하여 카메라 프로그래밍을 쉽게 구현하는 것을 소개합니다.
네트워크 프로그래밍 수준을 추가하면 화상 채팅을 구현하는 데 문제가되지 않습니다.
아래 코드를 확인하십시오.
const wm_cap_start = wm_user;
const wm_cap_stop = wm_cap_start + 68;
const wm_cap_driver_connect = wm_cap_start + 10;
const wm_cap_driver_disconnect = wm_cap_start + 11;
const wm_cap_savedib = wm_cap_start + 25;
const wm_cap_grab_frame = wm_cap_start + 60;
const wm_cap_sequence = wm_cap_start + 62;
const wm_cap_file_set_capture_filea = wm_cap_start + 20;
const wm_cap_sequence_nofile = wm_cap_start+ 63
const wm_cap_set_overlay = wm_cap_start+ 51
const wm_cap_set_preview = wm_cap_start+ 50
const wm_cap_set_callback_videostream = wm_cap_start +6;
const wm_cap_set_callback_error = wm_cap_start +2;
const wm_cap_set_callback_statusa = wm_cap_start +3;
const wm_cap_set_callback_frame = wm_cap_start +5;
const wm_cap_set_scale = wm_cap_start+ 53
const wm_cap_set_previewrate = wm_cap_start+ 52
함수 CapReateCaptureWindowa (lpszwindowname : pchar; dwstyle : longint; x : Integer;
Y : Integer; nwidth : Integer; Nheight : Integer; Parentwin : Hwnd;
nid : 정수) : hwnd; stdcall 외부 'avicap32.dll';
위의 코드는 우리가 주로 사용하는 함수와 상수의 정의입니다.
자, 델파이를 열고 새 프로젝트를 만들고 위의 정의를 추가하십시오.
새 창을 만들고 패널을 넣고 버튼을 추가하고 "시작"으로 캡션을 설정하십시오.
여기서는 전역 변수, var hwndc : thandle을 정의해야합니다.
시작 버튼의 코드는 다음과 같습니다.
시작하다
hwndc : = capcreatecapturewindowa ( '내 자신의 캡처 창', ws_child 또는 ws_visible, panel1.left, panel1.top, panel1.width, panel1.height, form1.handle, 0);
hwndc : = capcreatecapturewindowa ( '내 자신의 캡처 창', ws_child 또는 ws_visible, panel1.left, panel1.top, panel1.width, panel1.height, form1.handle, 0);
hwndc <> 0이면
시작하다
sendMessage (hwndc, wm_cap_set_callback_videoStream, 0, 0);
sendMessage (hwndc, wm_cap_set_callback_error, 0, 0);
sendMessage (hwndc, wm_cap_set_callback_statusa, 0, 0);
SendMessage (hwndc, wm_cap_driver_connect, 0, 0);
SendMessage (hwndc, wm_cap_set_scale, 1, 0);
sendMessage (hwndc, wm_cap_set_previewrate, 66, 0);
SendMessage (hwndc, wm_cap_set_overlay, 1, 0);
SendMessage (hwndc, wm_cap_set_preview, 1, 0);
끝;
F9를 눌러 실행하십시오. 카메라의 비디오 화면이 보일 수 있습니까?
그럼 멈추는 방법? "정지"에 다른 버튼 캡션 추가
코드는 다음과 같습니다.
hwndc <> 0이면 시작하십시오
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
hwndc : = 0;
끝;
비디오 화면이 스크리닝되었습니다. 어떻게 저장할 수 있습니까?
다음은 두 가지 방법으로 저장됩니다. 하나는 BMP 정적 다이어그램이고 다른 하나는 AVI 애니메이션입니다.
양식에 3 개의 버튼을 넣고 캡션을 "저장 BMP", "비디오 녹화 시작"및 "비디오 녹화 중지"로 설정하십시오.
세 버튼의 코드는 다음과 같습니다.
// BMP를 저장합니다
hwndc <> 0이면 시작하십시오
sendMessage (hwndc, wm_cap_savedib, 0, longint (pchar ( 'c : //test.bmp'));
끝;
// 비디오 녹화를 시작합니다
hwndc <> 0이면
시작하다
sendMessage (hwndc, wm_cap_file_set_capture_filea, 0, longint (pchar ( 'c : //test.avi'));
SendMessage (hwndc, wm_cap_sequence, 0, 0);
끝;
// 녹음을 중지합니다
hwndc <> 0이면 시작하십시오
SendMessage (hwndc, wm_cap_stop, 0, 0);
끝;
다시 실행하고 살펴보십시오. . 몇 장의 사진을 저장하여 볼 수 있거나 AVI에 녹음하여 천천히 즐길 수 있습니다.
프로그램 실행 효과 : [관련지도]
전체 프로그램 코드는 다음과 같습니다.
단위 유닛 1;
인터페이스
용도
창, 메시지, 시스템, 변형, 클래스, 그래픽, 컨트롤, 양식,
대화 상자, stdctrls, extctrls;
유형
tform1 = 클래스 (tform)
패널 1 : tpanel;
버튼 1 : tbutton;
버튼 2 : tbutton;
버튼 3 : tbutton;
버튼 4 : tbutton;
버튼 5 : tbutton;
절차 버튼 1Click (sender : tobject);
절차 button2click (sender : tobject);
절차 버튼 3Click (sender : tobject);
절차 버튼 4Click (sender : tobject);
절차 버튼 5Click (sender : tobject);
절차 formclose (발신자 : tobject; var action : tcloseacect);
사적인
HWNDC : Thandle;
공공의
{공개 선언}
끝;
var
form1 : tform1;
const wm_cap_start = wm_user;
const wm_cap_stop = wm_cap_start + 68;
const wm_cap_driver_connect = wm_cap_start + 10;
const wm_cap_driver_disconnect = wm_cap_start + 11;
const wm_cap_savedib = wm_cap_start + 25;
const wm_cap_grab_frame = wm_cap_start + 60;
const wm_cap_sequence = wm_cap_start + 62;
const wm_cap_file_set_capture_filea = wm_cap_start + 20;
const wm_cap_sequence_nofile = wm_cap_start+ 63
const wm_cap_set_overlay = wm_cap_start+ 51
const wm_cap_set_preview = wm_cap_start+ 50
const wm_cap_set_callback_videostream = wm_cap_start +6;
const wm_cap_set_callback_error = wm_cap_start +2;
const wm_cap_set_callback_statusa = wm_cap_start +3;
const wm_cap_set_callback_frame = wm_cap_start +5;
const wm_cap_set_scale = wm_cap_start+ 53
const wm_cap_set_previewrate = wm_cap_start+ 52
함수 CapReateCaptureWindowa (lpszwindowname : pchar;
dwstyle : longint; x : 정수; y : 정수; nwidth : 정수;
nheight : Integer; Parentwin : Hwnd; Nid : Integer) : hwnd;
stdcall 외부 'avicap32.dll';
구현
{$ r *.dfm}
절차 tform1.Button1click (sender : tobject);
시작하다
hwndc : = capcreatecapturewindowa ( '내 자신의 캡처 창', ws_child 또는 ws_visible, panel1.left, panel1.top, panel1.width, panel1.height, form1.handle, 0);
hwndc : = capcreatecapturewindowa ( '내 자신의 캡처 창', ws_child 또는 ws_visible, panel1.left, panel1.top, panel1.width, panel1.height, form1.handle, 0);
hwndc <> 0이면
시작하다
sendMessage (hwndc, wm_cap_set_callback_videoStream, 0, 0);
sendMessage (hwndc, wm_cap_set_callback_error, 0, 0);
sendMessage (hwndc, wm_cap_set_callback_statusa, 0, 0);
SendMessage (hwndc, wm_cap_driver_connect, 0, 0);
SendMessage (hwndc, wm_cap_set_scale, 1, 0);
sendMessage (hwndc, wm_cap_set_previewrate, 66, 0);
SendMessage (hwndc, wm_cap_set_overlay, 1, 0);
SendMessage (hwndc, wm_cap_set_preview, 1, 0);
끝;
끝;
절차 tform1.Button2Click (sender : tobject);
시작하다
hwndc <> 0이면 시작하십시오
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
hwndc : = 0;
끝;
끝;
절차 tform1.Button3Click (sender : tobject);
시작하다
hwndc <> 0이면 시작하십시오
sendMessage (hwndc, wm_cap_savedib, 0, longint (pchar ( 'c : //test.bmp'));
끝;
끝;
절차 tform1.Button4Click (sender : tobject);
시작하다
hwndc <> 0이면
시작하다
sendMessage (hwndc, wm_cap_file_set_capture_filea, 0, longint (pchar ( 'c : //test.avi'));
SendMessage (hwndc, wm_cap_sequence, 0, 0);
끝;
끝;
절차 tform1.Button5Click (sender : tobject);
시작하다
hwndc <> 0이면 시작하십시오
SendMessage (hwndc, wm_cap_stop, 0, 0);
끝;
끝;
절차 tform1.formclose (Sender : Tobject; var action : tcloseacect);
시작하다
hwndc <> 0이면 시작하십시오
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
끝;
끝;
끝.
컴퓨터에 카메라가 없지만 프로그램의 효과를보고 싶다면 괜찮습니까?
물론 Haha는 가상 카메라를 찾아서 소프트웨어 카메라 인 소프트웨어 카메라를 사용해 볼 수 있습니다.
"실제"카메라로 시뮬레이션 할 수 있습니다. QQ, MSN과 같은 채팅 소프트웨어에서 MM 또는 GG를기만하기 위해이 항목을 사용하지 마십시오.
카메라 프로그래밍과 관련 하여이 VCL 구성 요소 세트를 살펴볼 수 있습니다. Dspack은 Microsoft Direct Show 및 DirectX 기술을 사용하는 클래스 및 구성 요소 세트입니다. , 2000 및 Windows XP.
좋아, 이들은 비디오 채팅을 구현하는 방법에 대해서는 데이터를 압축하여 다른 파티에 전달하는 것입니다. 구현하려면.