Страница: 1 |
Страница: 1 |
Вопрос: Работа с Web-камерой
Добавлено: 17.03.07 17:07
Автор вопроса: Dark
Проблема такая:
Есть USB Web-камера, как можно получать изображение с камеры и сохранять его. Видео сохранять не надо, только одиночные ихображения.
vito дал пример кода:
if (!Windowed)
return;
Microsoft.DirectX.Direct3D.Surface Buff ;
Buff = device.CreateOffscreenPlainSurface(presentParams.BackBufferWidth, presentParams.BackBufferHeight, Format.A8R8G8B8, Pool.SystemMemory);
device.GetFrontBufferData(0, Buff);
SurfaceLoader.Save(@"scr.bmp", ImageFileFormat.Bmp, Buff);
Но он нерабочий: даже если объявить все необходимое остаются вопросы:
1) Метода SurfaceLoader нет в Microsoft.DirectX.Direct3D. Откуда он?
2)device здесь - устрйство вывода, а мне не нужно выводить изображение. Надо только получить его и сохранить в файл.
3) Как указать, что источник- Web-Camera?
Дописанный мной код компилируется, но не работает:
using Microsoft.DirectX.Direct3D;
Surface Buff;
PresentParameters presentParams = new PresentParameters();
PresentParameters[] param = new PresentParameters[1];
param[0] = presentParams;
Device device = new Device(0, DeviceType.Hardware, null,CreateFlags.NoWindowChanges, param);
Buff = device.CreateOffscreenPlainSurface
(presentParams.BackBufferWidth, presentParams.BackBufferHeight, Format.A8R8G8B8, Pool.SystemMemory);
device.GetFrontBufferData(0, Buff);
//SurfaceLoader.Save(@"scr.bmp", ImageFileFormat.Bmp, Buff);
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #1
Добавлено: 17.03.07 18:01
1) Метода SurfaceLoader нет в Microsoft.DirectX.Direct3D. Откуда он?
2)device здесь - устрйство вывода, а мне не нужно выводить изображение. Надо только получить его и сохранить в файл.
Microsoft.DirectX.Direct3D.SurfaceLoader
Если у тебя его нет, возможно у тебя более старая версия. У меня от декабря 2006.
Или специфика VB?
Работать этот пример естественно не будет, так как он берет изображение с "экрана".
Если ты изображение не выводишь, то здесь нужно подумать.
Хотя вопрос... А как ты выбираешь, что именно тебе нужно сохранить?
Номер ответа: 2
Автор ответа:
Dark
Вопросов: 4
Ответов: 41
Профиль | | #2
Добавлено: 17.03.07 18:31
У меня:
Assembly Microsoft.DirectX.Direct3D
C:\WINDOWS\Microsoft.NET\DirectX for Managed Code\1.0.2902.0\Microsoft.DirectX.Direct3D.dll.
Специфика VB? Я пишу на C#. И вроде твой пример тоже .
>А как ты выбираешь, что именно тебе нужно сохранить?
По нажатию кнопки изображение с камеры запишется в файл.
Номер ответа: 3
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #3
Добавлено: 18.03.07 00:18
Сорр ми. Совсем закрутился.
Весна. Кракодилы прилетели. Ну все в этом роде.
//-----------------
У меня.
Версия - 1.0.2902.0.
То есть одно и то же.
И такого метода нет?
Ладно давай еще раз по прядку.
Но если ты его на экран не выводишь?
Или я что -то не понимаю?
Допустим, у меня на USB висит камера(так оно на самом деле и есть), и я могу наблюдать свою физиономию в небольшом окошке на экране монитора.
По нажатию кнопки, я могу записать видеоролик или сделать скрин.
Так или нет?
Номер ответа: 4
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #4
Добавлено: 18.03.07 01:22
Боюсь, что разочарую.
MS написала, что из 9 DX удалены все возможности по работе с видео (это DirectShow), как не имеющие отношения к разработке игр.
Думаю причины конечно не в этом, просто конкурентов поразвелось...
В общем, как это ни странно, если хотим написать что -то вроде Nero или Winamp'а - добро пожаловать в 8 SDK.
Не ожидал... Честное слово.
В общем в 9 что для управляемого, что для неуправляемого - ничего нет кроме простого воспроизведения видео.
Извини. Для меня это конечно все равно, потому как пишу я на С/С++, а не на С#.
С# - это просто небольшие пробы, чтобы идти в ногу со временем. И составить собственное мнение о новой технологии. И хотя я в свое время довольно серьезно в это влез, на NET я так и не перешел.
А тот пример который я привел -это тоже написано для сравнения "старого" и "нового". И по скорости и по удобству реализации. Я просто переписал 3 своих примера с родного С++ на C# и Men. С++.
Можно конечно попробовать реализовать это на C# и 8 DX. Но стоит ли?
Дамс - Сусанин герой. Это я о себе.
Номер ответа: 5
Автор ответа:
Dark
Вопросов: 4
Ответов: 41
Профиль | | #5
Добавлено: 18.03.07 07:01
Я нашел на codeproject.com как это сделать через DirectShow (http://www.codeproject.com/cs/media/directshownet.asp). Очень хороший пример, есть все необходимое. Автор статьи (NETMaster) написал библиотеку DShowNET.dll, через которую все удобно делается.