2010-01-11 3 views
0

Я делаю свое приложение для временной привязки веб-камеры, но имею проблемы с некоторыми веб-камерами. Тот, в частности, рекламирует, что он может принимать 5MP-фотографии, но он запускает собственный 320x240 (или что-то ужасное), которое является фидом, который я получаю.Проблемы с разрешением захвата веб-камеры

Я использую код, который, кажется, хорошо скопировать и вставить через сеть, воплощение Я использую для доступа к веб-камере здесь http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=1339&lngWId=10 и использует avicap32 для доступа к веб-камера, вызов, глядя как этот

mCapHwnd = capCreateCaptureWindowA("WebCap", 0, 0, 0, m_Width, m_Height, this.Handle.ToInt32(), 0); 
SendMessage(mCapHwnd, WM_CAP_CONNECT, 0, 0); 
SendMessage(mCapHwnd, WM_CAP_SET_PREVIEW, 0, 0); 

Я тестировал с двумя другими веб-камер (один в встроенный в моем ноутбуке, один старичок я пиная вокруг) и оба эти, кажется, получают солидные решения.

Я изменил код Webcam_Capture, чтобы попытаться взять смехотворно высокое разрешение изображения

//private int m_Width = 320; 
//private int m_Height = 240; 
private int m_Width = 1600; 
private int m_Height = 1200; 
//private int m_Width = 3200; 
//private int m_Height = 2400; 

, используя несколько различных разрешений, как показано выше.

Моя кишка говорит мне, что мне нужно что-то сделать, чтобы веб-камера использовала другое разрешение, поскольку она, по-видимому, не соответствует некоторому собственному значению.

Мысли?

Я был бы рад опубликовать больше кода, который я использую, но это похоже на его мясо. WM_SET_PREVIEW может потребоваться объяснение, это константа API.

public const int WM_CAP_CONNECT = 1034; 
public const int WM_CAP_DISCONNECT = 1035; 
public const int WM_CAP_GET_FRAME = 1084; 
public const int WM_CAP_COPY = 1054; 
public const int WM_CAP_START = WM_USER; 
public const int WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + 41; 
public const int WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42; 
public const int WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 43; 
public const int WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44; 
public const int WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45; 
public const int WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + 46; 
public const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50; 

Любые идеи приветствуются! robg

+1

Я предполагаю, что вам нужно спросить его о неподвижных кадрах, а не о видео. –

+0

@Anon - Интересно, что это делает WM_SET_PREVIEW. http://msdn.microsoft.com/en-us/library/dd743928(VS.85).aspx Я рассматривал другие доступные константы, но никогда не бывает легко увидеть, как они связаны robg – 2010-01-11 21:54:52

+0

Согласен с Anon, 5MB ** Фотографии ** ничего не говорят о разрешении видео. – tster

ответ

0

Для настройки камеры не было введено кода. Таким образом, может применяться невысокое разрешение по умолчанию. Идеи:

  1. Не использовать видео для Windows - API устарел, ограничен и не является гибким программным способом. В любом случае, сообщение WM_CAP_SET_VIDEOFORMAT установит веб-камеру и изменит разрешение. Вместо этого используйте DirectShow или Media Foundation.

  2. Windows SDK предоставляет вам инструмент GraphEdit, в котором вы можете встраивать конвейер захвата в интерактивном режиме и, в частности, проверять доступные разрешения.

  3. Проверить спецификацию камеры: 5-мегапиксельная камера не означает, что это разрешение доступно для потокового видео. Video res может составлять 1/4 от этого, однако, конечно, это будет лучше, чем 320x240.

Смежные вопросы