هل يحتوي جهاز الكمبيوتر الخاص بك على كاميرا؟ هل تفكر في كيفية تحقيق ذلك عندما ترى الآخرين يلعبون مع 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_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
وظيفة capcreatecapturewindowa (lpszwindowname: pchar ؛ dwStyle: longint ؛ x: integer ؛
y: integer ؛ nwidth: integer ؛ nheight: integer ؛ parentwin: hwnd ؛
nid: integer): hwnd ؛ stdcall خارجي 'avicap32.dll' ؛
الرمز أعلاه هو تعريف وظيفة وثابتة نستخدمها بشكل أساسي.
حسنًا ، افتح Delphi ، قم بإنشاء مشروع جديد ، وأضف التعريف أعلاه.
قم بإنشاء نافذة جديدة ، ووضع لوحة عليها ، وأضف زرًا ، وقم بتعيين التسمية التوضيحية على "START"
هنا تحتاج إلى تحديد متغير عالمي ، 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.
ضع ثلاثة أزرار على النموذج ، وقم بتعيين التسمية التوضيحية على "حفظ BMP" و "بدء تسجيل الفيديو" و "إيقاف تسجيل الفيديو" على التوالي.
رموز الأزرار الثلاثة هي كما يلي:
// حفظ BMP
إذا كان hwndc <> 0 ثم ابدأ
SendMessage (HWNDC ، WM_CAP_SAVEDIB ، 0 ، longint (pchar ('c: //test.bmp'))) ؛
نهاية؛
// ابدأ تسجيل الفيديو
إذا كان hwndc <> 0 ثم
يبدأ
SendMessage (HWNDC ، WM_CAP_FILE_SET_CAPTUTE_FILEA ، 0 ، longint (pchar ('c: //test.avi')))) ؛
SendMessage (HWNDC ، WM_CAP_Seference ، 0 ، 0) ؛
نهاية؛
// توقف عن التسجيل
إذا كان hwndc <> 0 ثم ابدأ
SendMessage (HWNDC ، WM_CAP_STOP ، 0 ، 0) ؛
نهاية؛
قم بتشغيله مرة أخرى وألقي نظرة. . يمكنك حفظ بعض الصور لرؤيتها ، أو يمكنك تسجيلها في AVI والاستمتاع بها ببطء.
تأثير تشغيل البرنامج: [الخرائط ذات الصلة]
رمز البرنامج الكامل كما يلي:
الوحدة 1 ؛
واجهة
يستخدم
Windows ، الرسائل ، sysutils ، المتغيرات ، الفئات ، الرسومات ، عناصر التحكم ، النماذج ،
مربعات الحوار ، stdctrls ، extctrls ؛
يكتب
tform1 = فئة (tform)
لوحة 1: tpanel ؛
Button1: Tbutton ؛
Button2: Tbutton ؛
Button3: Tbutton ؛
Button4: Tbutton ؛
Button5: Tbutton ؛
الإجراءات button1click (المرسل: tobject) ؛
الإجراءات button2click (المرسل: tobject) ؛
الإجراء button3click (المرسل: tobject) ؛
الإجراءات button4click (المرسل: tobject) ؛
الإجراءات button5click (المرسل: tobject) ؛
الإجراء FormClose (المرسل: TOBJECT ؛ VAR ACTION: TCLOSEACTION) ؛
خاص
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
وظيفة 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 ، 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 (المرسل: 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_CAPTUTE_FILEA ، 0 ، longint (pchar ('c: //test.avi')))) ؛
SendMessage (HWNDC ، WM_CAP_Seference ، 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.
حسنًا ، دعنا نقدم هذه الدردشة. للتنفيذ.