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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2006, 23:23   #11
Gambler
Игрок
Форумчанин
 
Аватар для Gambler
 
Регистрация: 29.10.2006
Сообщений: 367
По умолчанию

ладно, спасибо! конечно не много помогли, но все равно спасибо!
Жизнь всегда игра. Но смерть - не всегда поражение.

#define true (Math.random()>0.5) //Удачной отладки
Gambler вне форума Ответить с цитированием
Старый 29.10.2009, 12:12   #12
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
а мне нужна прога!!!! и мне ее надо написать, а не просто исходник утащить! дельные советы будут?
хоть тема называется управление, но вижу затык с получением картинки... итак:

1) включить, то бишь получить-сграбить картинку с локальной камеры (usb подключение) можно через функции (универсальный подход к работе с драйвером камеры) AVICAP32.dll (cистемная)
Код:
var
  DC    : HDC;
  Bt    : BITMAPINFO;
  h_wnd : HWND;
  h_cam : HWND;

//== Получение и обработка кадра
function FrameCallback(hWnd: HWND; lpVHdr: PVIDEOHDR): DWORD; stdcall;
type
  TByteArray = array [0..1] of Byte;
  PByteArray = ^TByteArray;
var
  i, j   : Integer;
  sum    : Single;
  status : TCapStatus;
  str    : string;
begin
  Result := 0;
// информация о изображении
  SendMessage(h_cam, WM_CAP_GET_STATUS, SizeOf(status), Integer(@status));
// проверка на корректность формата изображения
  if (status.uiImageWidth > 640) or (status.uiImageHeight > 480) or
     (lpVhdr^.dwBytesUsed div (status.uiImageWidth * status.uiImageHeight) <> 3) then
  begin
    TextOut(DC, 0,  0, 'Размер изображения не должен превышать 640х480 пикселей', 55);
    TextOut(DC, 0,  18, 'Изображение должно быть 24 битным', 33);
    Exit;
  end;

// вывод результата в окно
  bt.bmiHeader.biWidth  := status.uiImageWidth;
  bt.bmiHeader.biHeight := status.uiImageHeight;
  StretchDIBits(DC, 0, 0, 640, 480, 0, 0, status.uiImageWidth, status.uiImageHeight, lpVHdr.lpData, bt, 0, SRCCOPY);
end;

// настройка подключения-
 DC  := GetDC(h_wnd);
  if SendMessage(h_cam, WM_CAP_DRIVER_CONNECT, 0, 0) <> 0 then
  begin
    SendMessage(h_cam, WM_CAP_GET_VIDEOFORMAT, SizeOf(Bt), LongInt(@Bt));
    Bt.bmiHeader.biWidth    := 320;
    Bt.bmiHeader.biHeight   := 240;
    Bt.bmiHeader.biSize     := SizeOf(Bt.bmiHeader);
    Bt.bmiHeader.biPlanes   := 1;
    Bt.bmiHeader.biBitCount := 24;
    SendMessage(h_cam, WM_CAP_SET_VIDEOFORMAT, SizeOf(Bt), LongInt(@Bt));
    SendMessage(h_cam, WM_CAP_SET_CALLBACK_FRAME, 0, Integer(@FrameCallback));
...

// получить кадр, например по таймеру
//SendMessage(h_cam, WM_CAP_GRAB_FRAME, 0, 0);
(модуль с хэдерами прилагаю, передать по сети проблем не составит, можно реализовать сервером, а с нета например браузером смотреть)
...кроме того есть готовый компонент для работы через эту dll - TJLCVideo/ В нем реализовано получение и аудиопотока
(тоже прилагаю)

2) как получить картинку с (подключиться к) ip камеры через инет тоже прилагаю материал http://raxp.radioliga.com/cnt/s.php?p=mw.pdf
(список ресурсов в статье)
пример тестовой утилиты, нажать F12 для просмотра локальной USB (во вложении)

...загрузка картинки с нета любым http клиентом, хоть с indy- набора. пример:
Код:
//=== закачка ===
procedure Tvid.HttpCli1DocBegin(Sender: TObject);
begin
 FileName:= '\' + HttpCli1.DocName;

 if HttpCli1.ContentType = 'image/gif' then ReplaceExt(FileName, 'gif')
  else if HttpCli1.ContentType = 'image/jpeg' then ReplaceExt(FileName, 'jpg')
   else if HttpCli1.ContentType = 'image/bmp' then ReplaceExt(FileName, 'bmp');
 //
 if HttpCli1.ContentType <> 'text/html' then
  try HttpCli1.RcvdStream := TFileStream.Create(FileName, fmCreate)
  except end
end;

procedure Tvid.HttpCli1DocEnd(Sender: TObject);
begin
 if HttpCli1.RcvdStream <> nil then begin
  HttpCli1.RcvdStream.Free;
  HttpCli1.RcvdStream:= nil;
 end
end;
в данном случае (ip) камера сама выступает сервером

3) если вы хотите передавать видео и у вас потоковая камера
...лучше использовать AsfWriter из набора dspack, доступ через интерфейс IWMWriterSink... пример передачи:
Код:
 AsfWriter1.WriterNetworkSink.SetNetworkProtocol(WMT_PROTOCOL_HTTP); 
 AsfWriter1.WriterNetworkSink.SetMaximumClients(10); 
 AsfWriter1.WriterNetworkSink.Open(номер порта); 
 AsfWriter1.WriterAdvanced2.AddSink(AsfWriter1.WriterNetworkSink); 
 AsfWriter1.WriterAdvanced2.SetLiveSource(True)
...это годится только если стандарт и интерфейс у камеры не какой-нибудь собственный (прокатывают потоковые камеры от axic)
...для просмотра можно импортировать - AxisCamControl activex (там же есть и управление)
Вложения
Тип файла: zip AviCaptura.zip (5.7 Кб, 802 просмотров)
Тип файла: zip JLCVideo.zip (5.1 Кб, 677 просмотров)
Тип файла: zip webcam_monitor3.zip (328.5 Кб, 827 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 29.10.2009 в 12:49. Причина: опа-ааа, глюк в форуме? а чего эта тема была в новых сообщениях, раз такое старье
raxp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаленное управление через ICQ dolphin705 Общие вопросы Delphi 25 07.10.2008 21:30
Управление голосом prizrak1390 Общие вопросы Delphi 2 24.06.2008 21:04
управление CD ROMom Cricket2007 Помощь студентам 4 16.06.2008 16:01
Управление по локалкЕ ZhekON Работа с сетью в Delphi 5 17.07.2007 09:04