ПредишенСледващото

Така че, без повече приказки, нека да започнем.

Ще създаде и добавяне на модул AviCap32Unit.pas проект. които описват външните функции и константи AVICAP32.DLL библиотека. Имаме нужда от две функции: capGetDriverDescriptionA и capCreateCaptureWindowA. Това, което те се нуждаят - ще обясня по-късно. Необходимо е също така 4 мнения: WM_CAP_START. WM_CAP_DRIVER_CONNECT. WM_CAP_GRAB_FRAME и WM_CAP_STOP.

Модул код AviCap32Unit:

Модул код CamCaptureUnit:

Както можете да видите, има два класа - TCamera и TCamList. Най-желания метод за нас - TCamera.CaptureBMP. Той реализира за снимане кадрите от камерата.

При създаване на форма, камерата ще се движи в системата:

С натискане на бутона "Старт" - Стартирайте камерата:

Таймер дава картинката:

опитайте се да се съберат, че не работи :(
На първо място, тя не се събират, грешки в модула за детектор
Vykusi как можа да го от проекта (не е задължително)
Програмата събира и управлява, но това не е по-лесно
Имам в системата 2 от устройството, а списъкът е само един Microsoft WDM и т.н.
и бял екран, вместо на една картина
Моля, помогнете, много необходимо хищник
ако е възможно, най-добре е да се по електронна поща
С уважение,
Kotovich

Prompt pozhaluysta- програма Delphi по време на компилация (7) се оплаква на низове съдържащи "изход (0)" и "изход (фалшиво)", а именно "Липсващ оператор или точка и запетая". Как мога да поправя тази грешка? Благодаря предварително.

tomskfarm, изход към параметър е възможно само в Делфи от версия XE.
За Delphi 7 Write

Добър ден!
Първо: Благодаря ви за вашия проблем, много интересно!

Дмитрий, използвайте двойно буфериране

Консервирани храни и може да бъде още две точки?
1) как да се приложи двойно буфериране
2) как трябва да помогне, или по някаква причина сега има такъв ефект?

Аз не съм се наблюдава този ефект, но често съм видял, че в някои настройки, операционната система е "мига".

Това е така, защото в процеса на оказване на изображения отнема известно време и процесът се вижда на екрана.

Вие трябва да изглежда по посока на манипулатора на таймера (CamTimer1Timer). Най-вероятно страда Image1.Picture.Assign (BMP); Опитайте се да използвате вътрешния механизъм на двойно буфериране Delphi:

или ръчно боя върху платно, използвайки BitBlt.

Консерви, благодаря, че помогна. Мисля, че тази промяна може да бъде добавен към тялото на статията)

Добър ден!
Сега друг проблем е излязъл, след около час работа виси на програмата, изображението е замразен, часовника на формата, също са замразени, да работи върху това нещо иска.
Ако се съди по симптом, че нещо някъде претъпкан.
Имаш ли представа къде да търсите в този случай?
Благодаря предварително, с уважение, Дмитрий.

Опитах се да направя Cam.Stop последвано Cam.Start, но Cam.Stop обикновено се прилага код не работи поради някаква причина.

функция TCamera.Stop (): булева;
започвам
ако (Fh<>0), тогава
започвам
SendMessage (Fh, WM_CAP_STOP 0, 0);
CloseHandle (Fh);
Fh: = 0;
приключи;
приключи;

катастрофи с проект за грешка повдигнати изключение клас $ C0000008 със съобщение "система за освобождаване (код 0xc0000008) при 0x771112f7"

Аз не съм намерил бъг в кода, дори и ако паметта ви е да се направи пречистване на обекта все още ще се зареди! За да се избегне този проблем, аз ще ви посъветва за почистване на обекти в таймер, където те се създават.

процедура TMainFormCamera.CamTimer1Timer (Sender: TObject);
Var BMP, ориг. TBitmap;
започвам
BMP: = TBitmap.Create;
bmp.PixelFormat: = pf24bit;
cam.CaptureBMP (BMP);
Orig: = TBitmap.Create;
orig.Width: = bmp.Width;
orig.Height: = bmp.Height;
orig.Assign (BMP);
orig.Free;
bmp.free;

Добре дошли! Моля, кажете ми как да премахнете изображение уеб-камера набута TMemoryStream и излъчват това, да кажем до клиента (TCPServer / TCPClient)?

@Serega
Аз ще ви кажа накратко:
cam.CaptureBMP (BMP);
bmp.savetostream (поток);

След това се превеждат нашия поток на вашия протокол в TCPServer / TCPClient.

По-добре, разбира се, предварително прекодиране на JPEG.

Много готино програма. Наистина искам да го разбирам, но не мога да се състави програма генерира грешка, която аз не знам как да се оправя. Моля sbrost програма с пощенски код. Ще бъда много благодарен

Добре дошли! Наистина ми хареса програмата. Исках да разбера как работи, но не мога otkompelirovat. Моля sbrost програма с пощенски код. Ще бъда много благодарен

@Patrik
Връзки към изходния код и EXE-Schnick там в края.

Delphi 7 е вече много остарял, по-добре използвайте повече или по-малко модерна версия.

За черен екран. 1. Вие "Start" кликне бутон?
2. Може би неправилно изключване на устройството или за последен път на уеб камера вече се използва от други програми? Рестартирайте компютъра и стартирайте програмата "напълно". Опитайте се на друг компютър.
3. Уеб камера е създадена и работи? Други програми за работа с камерата работи?
4. Какъв е вашият Windows версия?

Наскоро научих, че една картина се отстранява от камерата, но не се показва върху изображението. Какво би могло да е проблемът?

Здравейте, как правилно да промените разделителната способност на камерата? При подмяна на модул редове CamCaptureUnit
FWidth: = 1280;
FHeight: = 800;
Показан не е пълно изображение, снимката заема около една четвърт. Снимка направена, за да преоразмерите при 1280x800. Камерата също поддържа тази разделителна способност, проверени.

Анатолий @
Странно. Той трябва да работи.

Аз 640x480. Проверка за "голямата" камерата, за съжаление, не мога.

@Patrik
AVICAP32 остарели библиотека. Забелязала съм, проблем, ако не сте затворили програмата (без да изпрати WM_CAP_STOP бутон ЛС). Имаше проблеми, когато се отворят отново програмата.

AVICAP32 - това е повече, за да играят. Сериозни проекти (Skype тип) с помощта на DirectShow. Опитът с DirectShow не съм.

Благодаря за отговора. Жалко е, че AVICAP32 подкрепа не повече.
Просто всичко е добре боядисани.

Добър ден. Кажи ми, когато се обадите
Fh: = capCreateCaptureWindowA ( "тест", WS_VISIBLE или WS_CHILD, 10000,10000, FWidth, FHeight, GetDesktopWindow, 0);
Отваря се нов прозорец, независимо от факта, че през прозореца извън екрана (координира 10000.10000), лентата на задачите се вижда. Iozhno някакъв начин да го скрие?

Реших, че ако някой трябва да бъде, след като
Fh: = capCreateCaptureWindowA ( "тест", WS_VISIBLE, 10000,10000, FWidth, FHeight, GetDesktopWindow, 0);

Добави
ShowWindow (Fh, SW_HIDE);
SetWindowLong (Fh, GWL_EXSTYLE,
GetWindowLong (Fh, GWL_EXSTYLE) OR WS_EX_TOOLWINDOW);
ShowWindow (Fh, SW_SHOW);

Отворих програмата на Delphi XE 5. Но това не се компилира. Ето един бъг навън. Модул Load: CLBCatQ.DLL. Не Debug Info. База Адрес: $ 76FD0000. WebCam.exe Process (1980). Направих Configuration Build да пусне. и отстраняване на грешки. И все пак, някои тук са грешки. Какво да се прави. Помощ pozhalyusto

XE3 се случва отново:

Свързани статии

Подкрепете проекта - споделете линка, благодаря!