Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2015, 17:04   #1
SASFM
Форумчанин
 
Аватар для SASFM
 
Регистрация: 26.03.2015
Сообщений: 191
По умолчанию Web камера и Delphi

Здравствуйте дорогие коллеги. На этот раз у меня такой вопрос: Как программно можно включать Web камеру из Delphi, и сделать снимок. Знаю что вы обязательно ответите, за это и я вам скажу СПАСИБО!!!
Моя родина там, где мой компьютер
SASFM вне форума Ответить с цитированием
Старый 19.11.2015, 17:44   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

ставите драйвера к вебке. ищите к ним описание API. Реализуете программу с необходимым функционалом
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 19.11.2015, 18:04   #3
SASFM
Форумчанин
 
Аватар для SASFM
 
Регистрация: 26.03.2015
Сообщений: 191
По умолчанию

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
ставите драйвера к вебке. ищите к ним описание API. Реализуете программу с необходимым функционалом
Ничего не соображал
Моя родина там, где мой компьютер
SASFM вне форума Ответить с цитированием
Старый 19.11.2015, 18:04   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
ставите драйвера к вебке. ищите к ним описание API. Реализуете программу с необходимым функционалом
API то зачем?
есть общевиндовое АПИ.
DirectDraw например.
а можно еще поискать по словам webcam delphi и найти примеры.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.11.2015, 19:29   #5
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Где-то однажды была функция для получения изображения с камеры, но это было так давно. Задай в поисковик, яндекс должен дать ответ. Скажу только: Функция- чисто от WinApi.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 21.11.2015, 08:42   #6
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Код:
uses windows, graphics;

function MakeScreenshot(var bmp: TBitmap):Boolean;
var
  BufferSize : Integer;
  vih : TVideoInfoHeader;
  mt : TAMMediaType;
  BMPInfo : TBitmapInfo;
  Buffer : Pointer;
  tmp : array of Byte;
  hr : HRESULT;
  hbmp : hbitmap;
Begin
  Result := False;
  hr := pGrabber.GetCurrentBuffer(BufferSize,nil);
  ZeroMemory(@mt,SizeOf(tammediatype));
  hr := pGrabber.GetConnectedMediaType(mt);
  vih := tvideoinfoheader(mt.pbFormat^);
  ZeroMemory(@bmpinfo,SizeOf(tbitmapinfo));
  CopyMemory(@bmpinfo.bmiheader,@vih.bmiheader,SizeOf(tbitmapinfoheader));
  Buffer := nil;
  hbmp := CreateDIBSection(0,BMPInfo,DIB_PAL_COLORS,Buffer,0,0);
  case hbmp of
    0:
    begin
      MessageBox(form1,PChar('HBMP = 0'),'',0);
      Exit;
    end;
    ERROR_INVALID_PARAMETER:
    begin
      MessageBox(form1,PChar('ERROR_INVALID_PARAMETER'),'',0);
      Exit;
    end;
  end;
  bmp.Handle := hbmp;
  SetLength(tmp,BufferSize);
  pGrabber.GetCurrentBuffer(BufferSize,@tmp[0]);
  CopyMemory(Buffer,@tmp[0],mt.lSampleSize);
  SetLength(tmp,0);
  MoFreeMediaType(@mt);
  Result := True;
end;

procedure grabImage(const t: string);
// процедура снятия
begin
        bmp := TBitmap.Create;
        if MakeScreenshot(bmp) then
        begin
            bmp.SaveToFile(t);
        end;
        bmp.Free;
end;
SampleGrabber настраиваем так:
Код:
  CoCreateInstance(CLSID_SampleGrabber,nil,CLSCTX_INPROC,
                    IID_IBaseFilter,fGrabber);
  Result := pGraphBuilder.AddFilter(fGrabber,'Sample Grabber');
  if Result = s_ok then
  begin
    fGrabber.QueryInterface(IID_ISampleGrabber,pGrabber);
    ZeroMemory(@DesiredMT,SizeOf(DesiredMT));
    DesiredMT.majortype := MEDIATYPE_Video;
    DesiredMT.subtype := MEDIASUBTYPE_RGB24;
    DesiredMT.formattype := FORMAT_VideoInfo;
    Result := pGrabber.SetMediaType(DesiredMT);
    if Result = s_ok then
    begin
      pGrabber.SetOneShot(False);
      pGrabber.SetBufferSamples(True);
    end;
    MoFreeMediaType(@DesiredMT);
не забываем добавить граббер в функцию интеллектуального построения:
Код:
  Result:=FCaptureGraphBuilder.RenderStream(@PIN_CATEGORY_PREVIEW,
                                   @MEDIATYPE_Video, FVideoCaptureFilter, fGrabber, NIL);
Перед снятием скриншота, ставьте граф на паузу.
BLACK_RAIN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Web камера и capCreateCaptureWindow TEHb Общие вопросы Delphi 4 21.07.2013 13:05
Web камера TacoBell Общие вопросы C/C++ 8 01.10.2010 17:59
Web камера mas96 Компьютерное железо 2 24.09.2010 15:38
Web-программирование и web-камера Виталий Желтяков PHP 1 30.08.2010 01:45