Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/27: Рейтинг темы: голосов - 27, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 17.06.2011
Сообщений: 59

Сохранение снимка с веб камеры

10.03.2013, 15:32. Показов 5321. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Не как до меня не дойдет, есть программа захвата снимков с веб камеры, сохранение происходит при помощи CDialog, вопрос в том, как можно сохранить фотографию в указанное место, обычным кликом по кнопки не вызывая лишних окошек. Заранее спасибо!
Код прилагается
Вложения
Тип файла: zip research_web_camera.zip (2.5 Кб, 193 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.03.2013, 15:32
Ответы с готовыми решениями:

Получение снимка с Веб камеры
Всем доброго времени суток. Стало интересно попробовать получить снимок с веб камеры (не WIA, а обычной USB камеры). В интернете нашёл...

Как отключить автоматическое сохранение снимка с камеры в галерею
Бьюсь уже несколько дней. Из активити вызываю приложение Камера, указав место, где сохранить снимок. Получаю снимок, обрабатываю, использую...

Снимок с веб-камеры и сохранение в файл (hd)
Доброго времени суток. Есть задание: осуществить возможность сохранения снимка с веб-камеры в файл по нажатию на кнопку. Реализовал...

11
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.03.2013, 17:20
Цитата Сообщение от Vovan303 Посмотреть сообщение
обычным кликом по кнопки не вызывая лишних окошек
Закомментируй вызов диалога, а файл , куда сохранить? напиши явно в программе. Код кнопки тут
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub cmd4_Click()
Dim sFileName As String
    Call SendMessage(hCap, WM_CAP_SET_PREVIEW, CLng(False), 0&)
'    With CDialog
'        .CancelError = True
'        .Flags = cdlOFNPathMustExist Or cdlOFNOverwritePrompt
'        .Filter = "Bitmap Picture(*.bmp)/*.bmp/JPEG Picture(*.jpg)/*.jpg/All Files/*.*"
'        .ShowSave
'        sFileName = .FileName
'   End With
sFileName = "C:\snimok.bmp"
    Call SendMessage(hCap, WM_CAP_FILE_SAVEDIB, 0&, ByVal CStr(sFileName))
DoFinally:
    Call SendMessage(hCap, WM_CAP_SET_PREVIEW, CLng(True), 0&)
End Sub
2
0 / 0 / 0
Регистрация: 17.06.2011
Сообщений: 59
10.03.2013, 18:15  [ТС]
Спасибо огромное) И еще вопросик, можно как-то простенько видео писать с этой программы?!
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.03.2013, 20:07
Цитата Сообщение от Vovan303 Посмотреть сообщение
как-то простенько видео писать с этой программы?!
В модуль допиши константы
Visual Basic
1
2
3
Public Const WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + 46
Public Const WM_CAP_SEQUENCE = WM_CAP_START + 62
Public Const WM_CAP_FILE_SAVEASA = WM_CAP_START + 23
А из процедуры cmd4_Click() убери всё и напиши сл. строчки
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub cmd4_Click()
Dim sFileName As String
 
    sFileName = "C:\test1.avi"
     Call SendMessage(hCap, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0)
     Call SendMessage(hCap, WM_CAP_SEQUENCE, 0, 0)
     Call SendMessage(hCap, WM_CAP_FILE_SAVEASA, 0, ByVal CStr(sFileName))
    
 
End Sub
2
0 / 0 / 0
Регистрация: 17.06.2011
Сообщений: 59
13.03.2013, 14:03  [ТС]
Pro_grammer, Это я так понимаю делает захват фото и видео не с самой камеры, а из PictureBox-а. А можно ли вообще убрать PictureBox и делать снимки и видео не в BMP, а в jpeg и соответственно рулить качеством с кода. Помогите пожалуйста. Спасибо)
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
13.03.2013, 16:59
Цитата Сообщение от Vovan303 Посмотреть сообщение
не с самой камеры, а из PictureBox-а
Нет, именно с камеры. PictureBox для контроля. Можно сделать Picture размером 1х1 пиксель и его не будет видно, но снимки работать будут.
Цитата Сообщение от Vovan303 Посмотреть сообщение
делать снимки и видео не в BMP, а в jpeg
Видео в BMP - это как? Видео сохраняется со сжатием кодека, который вы же и выбираете. Можно выбрать без сжатия, тогда будет лучшее качество при огромном размере файла.
Снимки делаются в BMP - это лучшее качество, на которое способна ваша камера ( в настройках FormatCam выберите самый большой размер из возможных).
VB6 Не умеет самостоятельно преобразовать bmp в JPG формат. Для этого есть сторонние библиотеки - поищите на форуме, где то было.

Добавлено через 8 минут
Простая библиотека тут описана. Если в процедуру PngToJpg подсунуть файл c камеры (BMP), то она его преобразует в JPG.
В общем прочитай тему.
1
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 4
23.03.2013, 20:04
Pro_grammer, снова беда, собрал весь код, через таймер сделал автоматическое фотографирование... делает 74 фотографии и затыкается, сохраняет пустые файлы, вылечивается только перезагрузкой пк. В чем может быть проблема? Может быть буфер камеры переполняется?!
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
23.03.2013, 21:22
Цитата Сообщение от vovan3030 Посмотреть сообщение
В чем может быть проблема?
Скинь код, посмотрю. Сам с такой проблемой не сталкивался.
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 4
24.03.2013, 00:31
Pro_grammer,
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Dim hCap As Long
Dim W  As String
Private Sub Timer1_Timer()'таймер на 60000
'запускаем камеру
hCap = capCreateCaptureWindow("Take a Camera Shot", WS_CHILD Or WS_VISIBLE, 0, 0, PicWebCam.Width, PicWebCam.Height, PicWebCam.hWnd, 0)
    If hCap <> 0 Then
        Call SendMessage(hCap, WM_CAP_DRIVER_CONNECT, 0, 0)
        Call SendMessage(hCap, WM_CAP_SET_PREVIEWRATE, 66, 0&)
        Call SendMessage(hCap, WM_CAP_SET_PREVIEW, CLng(True), 0&)
    End If
    
W = Format(Now, "dd-mm-yy-h-m-s")
 
'делаем снимок
Dim sFileName As String
    Call SendMessage(hCap, WM_CAP_SET_PREVIEW, CLng(False), 0&)
    sFileName = "C:\"+ W + ".bmp" 
    Call SendMessage(hCap, WM_CAP_FILE_SAVEDIB, 0&, ByVal CStr(sFileName))
DoFinally:
    Call SendMessage(hCap, WM_CAP_SET_PREVIEW, CLng(True), 0&)
    
'Выключаем камеру
Dim temp As Long
temp = SendMessage(hCap, WM_CAP_DRIVER_DISCONNECT, 0&, 0&)
 
End Sub
 
В модуле вроде не чего не трогал, все то же:
 
Public Const WS_CHILD As Long = &H40000000
Public Const WS_VISIBLE As Long = &H10000000
Public Const WM_USER As Long = &H400
Public Const WM_CAP_START As Long = WM_USER
Public Const WM_CAP_DRIVER_CONNECT As Long = WM_CAP_START + 10
Public Const WM_CAP_DRIVER_DISCONNECT As Long = WM_CAP_START + 11
Public Const WM_CAP_SET_PREVIEW As Long = WM_CAP_START + 50
Public Const WM_CAP_SET_PREVIEWRATE As Long = WM_CAP_START + 52
Public Const WM_CAP_DLG_VIDEOFORMAT As Long = WM_CAP_START + 41
Public Const WM_CAP_FILE_SAVEDIB As Long = WM_CAP_START + 25
 
Public Declare Function capCreateCaptureWindow _
    Lib "avicap32.dll" Alias "capCreateCaptureWindowA" _
         (ByVal lpszWindowName As String, ByVal dwStyle As Long _
        , ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long _
        , ByVal nHeight As Long, ByVal hwndParent As Long _
        , ByVal nID As Long) As Long
 
Public Declare Function SendMessage Lib "user32" _
    Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long _
        , ByVal wParam As Long, ByRef lParam As Any) As Long
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
24.03.2013, 08:40
Цитата Сообщение от vovan3030 Посмотреть сообщение
сохраняет пустые файлы,
У меня при твоем коде вообще не делает снимков - камера не успевает включаться.
Переделал на включение при запуске, а снимки по таймеру. Снимает нормально, с частотой 1 кадр в секунду наснимал более 300 снимков. Исключил Image, прямо на форме изображение.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Dim hCap As Long
Dim W  As String
Private Sub Form_Load()
hCap = capCreateCaptureWindow("Take a Camera Shot", WS_CHILD Or WS_VISIBLE, 0, 0, 640, 480, Me.hWnd, 0) '
DoEvents
    If hCap <> 0 Then
        Call SendMessage(hCap, WM_CAP_DRIVER_CONNECT, 0, 0)
        Call SendMessage(hCap, WM_CAP_SET_PREVIEWRATE, 66, 0&)
        Call SendMessage(hCap, WM_CAP_SET_PREVIEW, CLng(True), 0&)
    End If
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
'Выключаем камеру
Dim temp As Long
temp = SendMessage(hCap, WM_CAP_DRIVER_DISCONNECT, 0&, 0&)
 
End Sub
 
Private Sub Timer1_Timer() 'таймер на 60000
    
W = Format(Now, "dd-mm-yy-h-m-s")
 
'делаем снимок
Dim sFileName As String
    Call SendMessage(hCap, WM_CAP_SET_PREVIEW, CLng(False), 0&)
    sFileName = "C:\" + W + ".bmp"
    Call SendMessage(hCap, WM_CAP_FILE_SAVEDIB, 0&, ByVal CStr(sFileName))
DoFinally:
    Call SendMessage(hCap, WM_CAP_SET_PREVIEW, CLng(True), 0&)
    
 
End Sub
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 4
24.03.2013, 11:24
Pro_grammer, да, пожалуй дело именно в том что не успевает.. в таймере все это делал для того что бы к камере могла подключиться другая программа, т.е что бы была доступна в некий промежуток времени. Как тогда можно сделать что бы при подключении другой программы камера становилась доступной, а моя программа находилась в режиме ожидания, а как только камера освобождалась моя сразу начинала фотографировать
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
24.03.2013, 11:53
Цитата Сообщение от vovan3030 Посмотреть сообщение
Как тогда можно сделать что бы при подключении другой программы камера становилась доступной
Насколько я знаю avicap32.dll не дает такой возможности подключать к одной камере несколько программ.
Должна быть возможность отследить ошибку подключения при занятой камере, какая - не знаю, как то не было необходимости тайного слежения при помощи камеры

А что бы успевала камера в вашем коде можно между включением WM_CAP_DRIVER_CONNECT и сохранением снимка сделать задержку ( к примеру использовать API Sleep ).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.03.2013, 11:53
Помогаю со студенческими работами здесь

Сохранение изображения с веб-камеры без использования буфера обмена
Здравствуйте, написал класс для работы с веб камерой из чужого примера, там та же самая проблема - для сохранения кадра используется буфер...

Нужен софт для использования веб камеры в качестве камеры наблюдения
Здрасте, у меня следующий вопрос: имеется старая веб камера, хочу ее аккуратно прилепить над входной дверью, и подключить к неттопу, нужен...

Веб Камера Logitech QuickCam Pro 5000 - нет изображения
Не в ту тему зашла, не нашла нужную, извините. У меня проблема веб-камерой Logitech QuickCam Pro 5000. Давно лежит, хотела установить....

Изображение с веб-камеры
Задача - получить фото/видео с вебкамеры под windows 7. Желательно готовый пример или хотя бы ссылки, где копать. (Понимаю, что не...

Картинка с веб камеры
Использую код: OpenWindow(0,0,0,500,500,&quot;&quot;) Define Ccam_lib1, *capAddress Ccam_lib1 = OpenLibrary(#PB_Any, &quot;avicap32.dll&quot;) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru