У вашего компьютера есть камера? Вы думаете о том, как это достичь, когда видите, как другие играют с 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_sectence = wm_cap_start + 62;
const wm_cap_file_set_capture_filea = wm_cap_start + 20;
const wm_cap_sectence_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
Function capcreateCaptureWindowa (lpszwindowname: pchar; dwstyle: longint; x: целое число;
y: целое число; nwidth: целое число; nheight: целое число; 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_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;
интерфейс
Использование
Windows, сообщения, Sysutils, варианты, классы, графика, управления, формы,
Диалоги, stdctrls, extctrls;
тип
Tform1 = class (tform)
Панель1: Tpanel;
Баттон1: Tbutton;
Button2: Tbutton;
Button3: Tbutton;
Баттон4: Tbutton;
Кнопка5: Tbutton;
процедура Button1click (отправитель: tobject);
процедура Button2click (отправитель: tobject);
процедура Button3click (отправитель: Tobject);
процедура Button4click (отправитель: Tobject);
процедура Button5click (отправитель: tobject);
Процедура FormClose (отправитель: tobject; var aect: tcloseaction);
Частный
HWNDC: Тандл;
публичный
{Публичные объявления}
конец;
вар
Форма1: 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_sectence = wm_cap_start + 62;
const wm_cap_file_set_capture_filea = wm_cap_start + 20;
const wm_cap_sectence_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: 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_capture_filea, 0, longint (pchar ('c: //test.avi')));
Sendmessage (hwndc, wm_cap_sequence, 0, 0);
конец;
конец;
Процедура tform1.button5click (отправитель: tobject);
Начинать
Если hwndc <> 0, то начните
Sendmessage (hwndc, wm_cap_stop, 0, 0);
конец;
конец;
Процедура tform1.formClose (отправитель: tobject; var action: tcloseaction);
Начинать
Если hwndc <> 0, то начните
Sendmessage (hwndc, wm_cap_driver_disconnect, 0, 0);
конец;
конец;
конец.
Если у компьютера нет камеры, но хочет увидеть эффект программы, это нормально?
Ха -ха, конечно, вы можете найти виртуальную камеру и просто сделать это.
Это может быть смоделировано как «настоящая» камера.
Что касается программирования камеры, вы также можете взглянуть на этот набор компонентов VCL: DSPACK. , 2000 и Windows XP.
Хорошо, давайте представим их. для реализации.