ver tomar libreria fotos desde camara c# clipboard webcam

tomar - Uso de la cámara web en C#



tomar fotos desde c# (6)

¿Has probado Clipboard.GetImage ()? También puede probar los diversos métodos Clipboard.Contains * () para ver qué formato se almacenan los datos en el portapapeles.

Estoy haciendo un programa en C # para conectarme a una cámara web y hacer algo de manipulación de imágenes con ella. Tengo una aplicación que funciona que usa win32 api (avicap32.dll) para conectarse a la cámara web y enviar mensajes a ella que la envía al portapapeles. El problema es que, aunque es accesible desde la pintura, leerlo del programa da como resultado punteros nulos.

Este es el código que uso para conectar la cámara web:

mCapHwnd = capCreateCaptureWindowA("WebCap", 0, 0, 0, 320, 240, 1024, 0); SendMessage(mCapHwnd, WM_CAP_CONNECT, 0, 0); SendMessage(mCapHwnd, WM_CAP_SET_PREVIEW, 0, 0);

Y esto es lo que uso para copiar la imagen al portapapeles:

SendMessage(mCapHwnd, WM_CAP_GET_FRAME, 0, 0); SendMessage(mCapHwnd, WM_CAP_COPY, 0, 0); tempObj = Clipboard.GetDataObject(); tempImg = (System.Drawing.Bitmap)tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap);

Hay una comprobación de errores que he eliminado del código para hacerlo más corto.

Gracias por adelantado :)


En realidad, hay dos maneras de obtener datos de la cámara en su aplicación, DirectShow y WIA. Microsoft recomienda que use WIA , y la interfaz para WIA es bastante simple para envolver su cerebro. Creé y publiqué una biblioteca de escritorio WIA de código abierto basada en el trabajo que hice hace un tiempo.

Ahora el problema con WIA en algunos casos es que es demasiado simple. Por ejemplo, si quiere ajustar las propiedades de la cámara (como velocidad de fotogramas, resolución, etc.), WIA se cae. Microsoft desaprobó DirectShow, pero realmente no nos dieron ningún reemplazo que tenga todas sus capacidades, y descubrí que continúa funcionando bien en todas las plataformas existentes (está muy arraigado, por lo que no puedo imaginar que el soporte desaparezca). en cualquier momento).

Hay una muy buena biblioteca de DirectShow en SourceForge . El único "problema" es que es realmente complejo y se debe al hecho de que DShow es tan malditamente complejo y confuso en primer lugar. Hay muchas cosas que puede hacer el envoltorio que no son fáciles de resolver, pero proporcionan muestras para muchos casos de uso común, como mostrar video o capturar un marco. Si desea agregar superposiciones o insertar otros filtros, puede hacerlo, pero tenga en cuenta que no es para nada sencillo.


Recientemente comencé a hacer algunos pasatiempos en esta área.

Decidimos usar la biblioteca OpenCV con el contenedor opencvdotnet . Es compatible con la captura de fotogramas de una cámara web:

using (var cv = new OpenCVDotNet.CVCapture(0)) { var image = cv.CreateCompatibleImage(); // ... cv.Release(); }

Y si está haciendo manipulación de imágenes, los algoritmos de procesamiento de imágenes de OpenCV se han incluido en el ensamblado OpenCVDotNet.Algs.

Si decide seguir esta ruta, asegúrese de instalar OpenCV versión 1.0 (e instálelo en "c: / program files / opencv" si está en Vista 64-bit, o "mklink OpenCV" c: / program files (x86) / OpenCV` "del directorio correcto o de lo contrario opencvdotnet no se instalará).



Captura de OpenCV, captura de EMGU y todas las demás bibliotecas de captura que he probado
todos tienen el mismo problema: no puede ir más alto que 640x480 programáticamente
(sin abrir la ventana de fuente de video de Windows).

Sugiero usar esto (que funciona):
https://github.com/ofTheo/videoInput


Esto también se preguntó en Cómo obtener imágenes de cámara web en C #? y es posible que encuentre útil lo siguiente (Perdón por correo no deseado, pero esto realmente ayuda a responder la pregunta):

Acabo de lanzar el código fuente completo de mi aplicación para Windows CamTimer (escrito en .NET / C #). Descargue / vea el código completo (con ejemplos de Webcam en funcionamiento) en https://github.com/johanssonrobotics/CamTimer

Feliz codificación!