Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 1
1
.NET 4.x

Странное поведение avicap32.dll (Захват изображения с вебкамеры)

27.03.2015, 15:29. Показов 2526. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть программа на C#, которая должна сделать снимок с первой попавшейся веб камеры, и сохранить его в файл Test.jpg.

C#
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
using System;
using System.Runtime.InteropServices;
 
namespace ConsoleApplication1
{
    class Program
    {
        private const int WM_CAP_DRIVER_CONNECT = 0x40a;
        private const int WM_CAP_DRIVER_DISCONNECT = 0x40b;
        private const int WS_CHILD = 0x40000000;
        private const int WS_POPUP = unchecked((int)0x80000000);
        private const int WM_CAP_SAVEDIB = 0x419;
        private const int WM_CLOSE = 0x0010;
 
        [DllImport("avicap32.dll", EntryPoint = "capCreateCaptureWindowA")]
        public static extern IntPtr capCreateCaptureWindowA(string lpszWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, int hwndParent, int nID);
        [DllImport("user32", EntryPoint = "SendMessage")]
        public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
 
        static void Main(string[] args)
        {
            string path = "Test.jpg";                               //имя файла
            IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);        //имя файла
 
            IntPtr hWndC = capCreateCaptureWindowA("VFW Capture", WS_POPUP | WS_CHILD, 0, 0, 640, 480, 0, 0); // узнать дескриптор камеры
            SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);        //подключиться к камере
            //SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);      //подключиться к камере
            SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt32());  //сохранить скриншот
            SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);     //отключить камеру
            SendMessage(hWndC, WM_CLOSE, 0, 0);                     //закрыть CaptureWindow
        }     
    }
}
Однако снимок сохраняется только при первом запуске программы, при последующих запусках программа выдает окно:

и вместо картинки сохраняет файл Test.jpg с нулевым размером.

После перезагрузки ОС программа один раз срабатывает, а потом опять ничего не сохраняет.

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

Похожий эффект будет, если раскомментировать 27 строку кода: при первом вызове WM_CAP_DRIVER_CONNECT прога выдает выбора видео устройства, ничего не сохранив, а при повторном (тот что раскомментирован) снимок удачно сохраняется.

Так что нужно переделать, чтобы изображения всегда сохранялось без вывода окна выбора видео устройства?
Проект приложен.
Миниатюры
Странное поведение avicap32.dll (Захват изображения с вебкамеры)  
Вложения
Тип файла: rar webcam capture.rar (20.8 Кб, 23 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2015, 15:29
Ответы с готовыми решениями:

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

Странное поведение при добавлении dll
Доброго времени суток. Столкнулся со странной вещью и понимаю, что что-о делаю не так. В проект...

Захват изображения с видеокамер/вебкамеры
Собственно сабж: еть вывод на экран видео,в определенный момент нужно сделать снимок(photo shot)....

Странное поведение VS
Все работает, однако при открытии дизайна формы пишет: Object reference not set to an instance...

1
3 / 2 / 5
Регистрация: 03.04.2012
Сообщений: 40
25.07.2016, 14:37 2
Пропиши 2 раза подряд SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
А точнее сними коммент со 2ой строки.
0
25.07.2016, 14:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.07.2016, 14:37
Помогаю со студенческими работами здесь

Странное поведение HttpWebRequest
Делаю запрос к серверу на получение данных через HttpWebRequest. Сами данные в виде JSON, и их по...

Странное поведение мьютекса
Имеется такой кусок кода Mutex instanse; bool is_new; ...

Странное поведение массива
Есть класс-наследник. Определено поле и метод. Не смотря на то что в поле записываются данные...

Странное поведение event-ов
Всем доброго дня! Подскажите, кто знает, в чем может быть проблема. Есть структура такого...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru