คอมพิวเตอร์ของคุณมีกล้องหรือไม่? คุณจะคิดเกี่ยวกับวิธีการบรรลุเป้าหมายเมื่อคุณเห็นคนอื่นเล่นกับ QQ หรือไม่?
ที่นี่เราแนะนำว่าการใช้ Delphi เพื่อใช้ 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_SEPECENCE = 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
ฟังก์ชั่น capcreateCapturewindowa (lpszwindowname: pchar; dwstyle: longint; x: จำนวนเต็ม;
y: จำนวนเต็ม; nwidth: จำนวนเต็ม; nheight: จำนวนเต็ม; parentwin: hwnd;
NID: จำนวนเต็ม): hwnd; stdcall ภายนอก 'avicap32.dll';
รหัสข้างต้นคือคำจำกัดความของฟังก์ชั่นและค่าคงที่ที่เราใช้เป็นหลัก
ตกลงเปิด Delphi ของคุณสร้างโครงการใหม่และเพิ่มคำจำกัดความข้างต้น
สร้างหน้าต่างใหม่วางแผงไว้เพิ่มปุ่มและตั้งค่าคำบรรยายเป็น "เริ่ม"
ที่นี่คุณต้องกำหนดตัวแปรส่วนกลาง, var hwndc: thandle;
รหัสของปุ่มเริ่มต้นมีดังนี้:
เริ่ม
hwndc: = capcreateCapturewindowa ('หน้าต่างจับภาพของฉันเอง', ws_child หรือ ws_visible, แผง 1.left, แผงหน้า 1.top, แผงหน้า 1.width, แผง 1.height, form1.handle, 0);
hwndc: = capcreateCapturewindowa ('หน้าต่างจับภาพของฉันเอง', ws_child หรือ ws_visible, แผง 1.left, แผงหน้า 1.top, แผงหน้า 1.width, แผง 1.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
ใส่ปุ่มสามปุ่มบนแบบฟอร์มและตั้งค่าคำบรรยายภาพเป็น "บันทึก 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_SECTION, 0, 0);
จบ;
// หยุดการบันทึก
ถ้า hwndc <> 0 แล้วเริ่มต้น
SendMessage (HWNDC, WM_CAP_STOP, 0, 0);
จบ;
เรียกใช้อีกครั้งและดู - คุณสามารถบันทึกภาพสองสามภาพเพื่อดูหรือคุณสามารถบันทึกลงใน AVI และสนุกกับมันอย่างช้าๆ
เอฟเฟกต์การทำงานของโปรแกรม: [แผนที่ที่เกี่ยวข้อง]
รหัสโปรแกรมที่สมบูรณ์มีดังนี้:
บทที่หน่วย 1;
ส่วนต่อประสาน
ใช้
Windows, ข้อความ, sysutils, ตัวแปร, คลาส, กราฟิก, การควบคุม, รูปแบบ,
กล่องโต้ตอบ, stdctrls, extctrls;
พิมพ์
tform1 = คลาส (tform)
Panel1: tpanel;
ปุ่ม 1: tbutton;
button2: tbutton;
ปุ่ม 3: tbutton;
ปุ่ม 4: tbutton;
ปุ่ม 5: Tbutton;
ขั้นตอน button1click (ผู้ส่ง: tobject);
ขั้นตอน button2click (ผู้ส่ง: tobject);
ขั้นตอน button3click (ผู้ส่ง: tobject);
ขั้นตอน button4click (ผู้ส่ง: tobject);
ขั้นตอน button5click (ผู้ส่ง: tobject);
Procedure FormClose (ผู้ส่ง: tobject; การกระทำของ VAR: tcloseaction);
ส่วนตัว
HWNDC: Thandle;
สาธารณะ
{ประกาศสาธารณะ}
จบ;
วาจา
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_SEPECENCE = 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
ฟังก์ชั่น capcreateCapturewindowa (lpszwindowname: pchar;
DWSTYLE: Longint; X: Integer; Y: Integer; Nwidth: Integer;
Nheight: Integer; Parentwin: Hwnd; NID: Integer): hwnd;
stdcall ภายนอก 'avicap32.dll';
การดำเนินการ
{$ r *.dfm}
ขั้นตอน tform1.button1click (ผู้ส่ง: tobject);
เริ่ม
hwndc: = capcreateCapturewindowa ('หน้าต่างจับภาพของฉันเอง', ws_child หรือ ws_visible, แผง 1.left, แผงหน้า 1.top, แผงหน้า 1.width, แผง 1.height, form1.handle, 0);
hwndc: = capcreateCapturewindowa ('หน้าต่างจับภาพของฉันเอง', ws_child หรือ ws_visible, แผง 1.left, แผงหน้า 1.top, แผงหน้า 1.width, แผง 1.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 (ผู้ส่ง: TOBJECT);
เริ่ม
ถ้า hwndc <> 0 แล้วเริ่มต้น
SendMessage (HWNDC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
hwndc: = 0;
จบ;
จบ;
ขั้นตอน tform1.button3click (ผู้ส่ง: tobject);
เริ่ม
ถ้า hwndc <> 0 แล้วเริ่มต้น
SendMessage (hwndc, wm_cap_savedib, 0, longint (pchar ('c: //test.bmp'))));
จบ;
จบ;
ขั้นตอน tform1.button4click (ผู้ส่ง: tobject);
เริ่ม
ถ้า hwndc <> 0 แล้ว
เริ่ม
SendMessage (hwndc, wm_cap_file_set_capture_filea, 0, longint (pchar ('c: //test.avi')));
SendMessage (HWNDC, WM_CAP_SECTION, 0, 0);
จบ;
จบ;
ขั้นตอน tform1.button5click (ผู้ส่ง: tobject);
เริ่ม
ถ้า hwndc <> 0 แล้วเริ่มต้น
SendMessage (HWNDC, WM_CAP_STOP, 0, 0);
จบ;
จบ;
โพรซีเดอร์ TFORM1.FormClose (ผู้ส่ง: tobject; การกระทำ var: tcloseaction);
เริ่ม
ถ้า hwndc <> 0 แล้วเริ่มต้น
SendMessage (HWNDC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
จบ;
จบ;
จบ.
หากคอมพิวเตอร์ไม่มีกล้อง แต่ต้องการเห็นผลกระทบของโปรแกรมก็โอเคไหม?
แน่นอนว่าคุณสามารถค้นหากล้องเสมือนจริงและทำมันได้
มันสามารถจำลองได้ว่าเป็นกล้อง "ของจริง"
เกี่ยวกับการเขียนโปรแกรมกล้องคุณยังสามารถดูชุดของชุด VCL นี้: DSPACK , 2000 และ Windows XP
โอเคเรามาแนะนำวิธีการแชทวิดีโอมันขึ้นอยู่กับคุณ เพื่อดำเนินการ