Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Программная работа с веб-камерой.

1
14 мая 2006 года
kot_
7.3K / / 20.01.2000
Задумал прикрутить в свой программный комплекс возможность работы с веб-камерой. Задумка проста - использовать камеру в качестве банального фотоаппарата - кликнул по кнопке - получил фото - кликнул по второй - сохранил в базу. Ничего сложного. Вариантов работы (если не рассматривать возможность написания собственного драйвера :) ) три. Первый - использование возможностей библиотеки vfw32. Вобщем то достаточно наиболее простой и на нем я пока и остановился. Вариант второй - работа через DirectX - особо не разбирался, возможно штука неплохая, но для моих задач пока не нужна, если кому приходилось работать - черкните примерчик :). И третий вариант - работа через TWAIN - пример использования можно найти здесь.
С ним пока не разбирался.
Для того что бы реализовать работу с камерой первым способом необходимо подключить в проект соответственно две библиотеки - vfw32.lib, winmm.lib - $(BCB)\lib\PSDK.
Следующим шагом - надо включить заголовочные файлы:
 
Код:
#include <vfw.h>
#include <Windows.h>
//Если планируется работа с клипбордом
#include <Clipbrd.hpp>

После этого пишем инициализацию камеры (для простоты я в примере посто повесил ее на кнопку назвал ее Запись)
Код:
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
   hWndC = capCreateCaptureWindow ( "",
            WS_CHILD,
            this->Left, this->Top,
            this->Width, this->Height,
            this->Handle, 11011);
   
            capDriverConnect (hWndC, 0);
          Timer1->Enabled = true;
   
}

hWndC - переменная объявленная в данном случае в закрытой части класа формы, так как использовать ее прийдется по всему классу. Параметры функции
capCreateCaptureWindow - смотреть понятно где :).
Таймер здесь нужен в том случае если вы хотите получить видеоизображение - правда надо сказать борландовский таймер для этого негодится и здесь используется только ради примера, слишком не точен и при его использовании изображение изрядно тормозит.
В функцию таймера пишем типа такого:
 
Код:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
          capGrabFrame(hWndC);
          if(capEditCopy(hWndC))
            Image1->Picture->LoadFromClipboardFormat(CF_BITMAP, pCB->GetAsHandle(CF_BITMAP), 0);


}

В обрабочик кнопки Прекратить пишем:
 
Код:
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{

capDriverDisconnect(hWndC);
}

Вот в принципе и все. В результате в Image1 после нажатия первой кнопки у вас будет выводится изображение с камеры до тех пор пока вы не нажмете вторую.
Естественно это далеко не все что можно делать - но здесь, как говорится МСДН вам в руки и попутный ветер в ... спину. Удачи.
31K
14 августа 2007 года
Zefik
7 / / 14.08.2007
Прошу прощения если глупый вопрос, сначала думал, что из-за того что не смог добавить эти две lib библиотеки, но разобрался и добавил. И все равно та же ошибка:
[C++ Error] Unit1.cpp(25): E2451 Undefined symbol 'hWndC'
[C++ Error] Unit1.cpp(38): E2451 Undefined symbol 'hWndC'
[C++ Error] Unit1.cpp(43): E2451 Undefined symbol 'hWndC'
[C++ Error] Unit1.cpp(45): E2451 Undefined symbol 'pCB'
92
14 августа 2007 года
Тень Пса
2.2K / / 19.10.2006
[COLOR=DarkRed]Zefik,[/COLOR]
[quote="kot_"]
hWndC - переменная объявленная в данном случае в закрытой части класа формы, так как использовать ее прийдется по всему классу. Параметры функции
[/quote]
читаем внимательнее!

ЗЫ: по поводу второй переменной - почитай справку по LoadFromClipboardFormat и посмотри, что должно быть вторым параметром.
31K
14 августа 2007 года
Zefik
7 / / 14.08.2007
Не могу разобраться как прописывать hWndC... Фиговые видимо у меня "знания основ". А вместо pCB в другом примере Clipboard() написано.
92
14 августа 2007 года
Тень Пса
2.2K / / 19.10.2006
сделай hWndC членом класса твоей формы.
31K
14 августа 2007 года
Zefik
7 / / 14.08.2007
Цитата:
сделай hWndC членом класса твоей формы.


Спасибо, вроде разобрался, прописал вот так:

 
Код:
TForm1 *Form1;
HWND hWndC;

Заработало, правда полного понимания того что я собственно сделал не пришло :) .

Цитата:
Таймер здесь нужен в том случае если вы хотите получить видеоизображение - правда надо сказать борландовский таймер для этого негодится и здесь используется только ради примера, слишком не точен и при его использовании изображение изрядно тормозит.


А что можно использовать вместо таймера? А то действительно приглючивает.

92
14 августа 2007 года
Тень Пса
2.2K / / 19.10.2006
ты объявил глобально для всего модуля переменную hWndC
50K
21 мая 2009 года
Foxl
2 / / 21.05.2009
В строке:
Image1->Picture->LoadFromClipboardFormat(CF_BITMAP, pCB->GetAsHandle(CF_BITMAP), 0);
Следующая ошибка:
[C++ Error] Unit1.cpp(42): E2288 Pointer to structure required on left side of -> or ->*
Вопрос: как ее устранить?
1
21 мая 2009 года
kot_
7.3K / / 20.01.2000
Цитата: Foxl
В строке:
Image1->Picture->LoadFromClipboardFormat(CF_BITMAP, pCB->GetAsHandle(CF_BITMAP), 0);
Следующая ошибка:
[C++ Error] Unit1.cpp(42): E2288 Pointer to structure required on left side of -> or ->*
Вопрос: как ее устранить?


Тебе что - трудно поднять глаза на пару сообщений выше?
Тдля кого это написано?

Цитата:

почитай справку по LoadFromClipboardFormat и посмотри, что должно быть вторым параметром.


Наверно ведь для таких как ты?

1
21 мая 2009 года
kot_
7.3K / / 20.01.2000
Или ты считаешь что спустя 3 года и семь дней я кинусь смотреть, указатель на что это было и зачем он там?
50K
23 мая 2009 года
Foxl
2 / / 21.05.2009
Прошу прощения!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог