Guía de Implementación de Captura de Pantalla¶
Video Capture SDK .Net VideoCaptureCoreX VideoCaptureCore
Introducción a la Captura de Pantalla¶
La tecnología de captura de pantalla permite a los desarrolladores grabar y transmitir programáticamente el contenido visual mostrado en un monitor de computadora. Esta poderosa funcionalidad sirve como base para numerosas aplicaciones incluyendo:
- Herramientas de soporte remoto y asistencia técnica
- Demostración de software y creación de tutoriales
- Grabación y transmisión de juegos
- Sistemas de webinars y presentaciones
- Automatización de control de calidad y pruebas
Video Capture SDK .Net proporciona a los desarrolladores herramientas robustas para capturar contenido de pantalla con alto rendimiento y flexibilidad. El SDK soporta capturar pantallas completas, ventanas de aplicaciones individuales o regiones de pantalla personalizadas.
Soporte de Plataforma y Descripción General de la Tecnología¶
Implementación en Windows¶
En plataformas Windows, el SDK aprovecha el poder de las tecnologías DirectX para lograr un rendimiento óptimo. Los desarrolladores pueden elegir entre:
- DirectX 9: Soporte legacy para sistemas más antiguos
- DirectX 11/12: Implementación moderna que ofrece rendimiento y eficiencia superiores
DirectX 11 es particularmente recomendado para escenarios de captura de ventanas debido a su manejo mejorado de composición de ventanas y características de rendimiento superiores.
Configuración de Captura Principal¶
La implementación de VideoCaptureCore proporciona opciones de configuración sencillas para controlar el proceso de captura:
AllowCaptureMouseCursor: Habilitar o deshabilitar la visibilidad del cursor en el contenido capturadoDisplayIndex: Seleccionar qué pantalla capturar en configuraciones de múltiples monitores (indexado desde cero)ScreenPreview/ScreenCapture: Establecer el modo operacional para visualización o grabación
Configuración de Captura Avanzada¶
VideoCaptureCoreX ofrece control más granular a través de clases de configuración dedicadas:
ScreenCaptureDX9SourceSettings: Configurar captura basada en DirectX 9ScreenCaptureD3D11SourceSettings: Configurar captura basada en DirectX 11 con rendimiento mejorado
Implementación de Captura de Pantalla Completa y Región¶
Capturar ya sea una pantalla completa o una región de pantalla definida es un requisito común para muchas aplicaciones. A continuación están los enfoques de implementación para VideoCaptureCore y VideoCaptureCoreX.
Configurar Captura de Pantalla Completa y Región¶
El siguiente código demuestra cómo configurar los ajustes de captura de pantalla para modo de pantalla completa o una región rectangular específica:
// Establecer ajustes de fuente de captura de pantalla
VideoCapture1.Screen_Capture_Source = new ScreenCaptureSourceSettings
{
// Establecer a true para capturar la pantalla completa
FullScreen = false,
// Establecer la posición izquierda del área de pantalla
Left = 0,
// Establecer la posición superior del área de pantalla
Top = 0,
// Establecer el ancho del área de pantalla
Width = 640,
// Establecer la altura del área de pantalla
Height = 480,
// Establecer el índice de pantalla
DisplayIndex = 0,
// Establecer la tasa de fotogramas
FrameRate = new VideoFrameRate(25),
// Establecer a true para capturar el cursor del ratón
AllowCaptureMouseCursor = true
};
Cuando FullScreen está establecido a true, las propiedades Left, Top, Width y Height son ignoradas, y se captura la pantalla completa especificada por DisplayIndex.
Para configuraciones de múltiples monitores, la propiedad DisplayIndex identifica qué monitor capturar, con 0 representando la pantalla principal.
Captura de Pantalla Avanzada con DirectX 11¶
VideoCaptureCoreX proporciona una implementación más potente usando tecnología DirectX 11:
// Índice de pantalla
var screenID = 0;
// Crear una nueva fuente de captura de pantalla usando DirectX 11
var source = new ScreenCaptureD3D11SourceSettings();
// Establecer la API de captura
source.API = D3D11ScreenCaptureAPI.WGC;
// Establecer la tasa de fotogramas
source.FrameRate = new VideoFrameRate(25);
// Establecer el área de pantalla o modo de pantalla completa
if (fullscreen)
{
// Enumerar todas las pantallas y establecer el área de pantalla
for (int i = 0; i < System.Windows.Forms.Screen.AllScreens.Length; i++)
{
if (i == screenID)
{
source.Rectangle = new VisioForge.Core.Types.Rect(System.Windows.Forms.Screen.AllScreens[i].Bounds);
}
}
}
else
{
// Establecer el área de pantalla
source.Rectangle = new VisioForge.Core.Types.Rect(0, 0, 1280, 720);
}
// Establecer a true para capturar el cursor del ratón
source.CaptureCursor = true;
// Establecer el índice del monitor
source.MonitorIndex = screenID;
// Establecer la fuente de captura de pantalla
VideoCapture1.Video_Source = source;
La opción de API Windows Graphics Capture (WGC) proporciona excelente rendimiento en Windows 10 y superior. Este enfoque también demuestra el uso de System.Windows.Forms.Screen.AllScreens para determinar programáticamente los límites de las pantallas disponibles.
Implementación de Captura de Ventana¶
Capturar ventanas de aplicación específicas permite la grabación dirigida de aplicaciones individuales sin incluir otro contenido del escritorio. Esto es particularmente útil para:
- Tutoriales específicos de aplicación
- Demos de software
- Escenarios de soporte donde solo una aplicación es relevante
Captura de Ventana Básica¶
Para capturar una ventana específica con VideoCaptureCore:
// Establecer ajustes de fuente de captura de pantalla
VideoCapture1.Screen_Capture_Source = new ScreenCaptureSourceSettings
{
// Deshabilitar captura de pantalla completa
FullScreen = false,
// Establecer el handle de la ventana
WindowHandle = windowHandle,
// Establecer la tasa de fotogramas
FrameRate = new VideoFrameRate(25),
// Establecer a true para capturar el cursor del ratón
AllowCaptureMouseCursor = true
};
El parámetro windowHandle debe contener un handle válido a la ventana objetivo. Esto puede obtenerse usando funciones de la API de Windows como FindWindow o usando bibliotecas de automatización de UI.
Captura de Ventana Mejorada¶
VideoCaptureCoreX proporciona una implementación optimizada de captura de ventana:
// Crear fuente Direct3D11
var source = new ScreenCaptureD3D11SourceSettings();
// Establecer la API de captura
source.API = D3D11ScreenCaptureAPI.WGC;
// Establecer tasa de fotogramas
source.FrameRate = new VideoFrameRate(25);
// Establecer el handle de la ventana
source.WindowHandle = windowHandle;
VideoCapture1.Video_Source = source; // Establecer la fuente de captura de pantalla
La implementación DirectX 11 ofrece mejor rendimiento, particularmente para capturar aplicaciones que usan aceleración por hardware.
Técnicas de Optimización de Rendimiento¶
Optimizar el rendimiento de captura de pantalla es crucial para mantener altas tasas de fotogramas mientras se minimiza el uso de CPU y memoria. Considera las siguientes mejores prácticas:
Gestión de Tasa de Fotogramas¶
Selecciona cuidadosamente una tasa de fotogramas apropiada basada en los requisitos de tu aplicación:
- Para grabación de propósito general: 15-30 FPS es típicamente suficiente
- Para juegos o contenido con mucho movimiento: 30-60 FPS puede ser necesario
- Para contenido estático o basado en documentos: 5-10 FPS puede reducir significativamente el uso de recursos
Consideraciones de Resolución¶
Las capturas de mayor resolución requieren más poder de procesamiento y memoria. Considera:
- Capturar a menor resolución y escalar hacia arriba si es apropiado
- Usar captura de región en lugar de pantalla completa cuando solo parte de la pantalla es relevante
- Implementar cambio de resolución basado en el tipo de contenido
Aceleración por Hardware¶
Cuando esté disponible, usar DirectX 11/12 con aceleración por hardware puede mejorar significativamente el rendimiento:
- Reduce la carga de CPU aprovechando la GPU
- Proporciona mejores tasas de fotogramas, especialmente con contenido de alta resolución
- Permite codificación más eficiente cuando se combina con codificadores de video acelerados por hardware
Escenarios de Implementación Avanzada¶
Configuración Multi-Monitor¶
Trabajar con configuraciones de múltiples monitores requiere consideración especial:
// Detectar todos los monitores disponibles
var screens = System.Windows.Forms.Screen.AllScreens;
// Crear una lista para presentar al usuario
var screenOptions = new List<string>();
for (int i = 0; i < screens.Length; i++)
{
screenOptions.Add($"Monitor {i+1}: {screens[i].Bounds.Width} x {screens[i].Bounds.Height}");
}
// Una vez hecha la selección, establecer el DisplayIndex/MonitorIndex apropiado
Selección de Ventana de Aplicación¶
Proporcionar a los usuarios la capacidad de seleccionar una ventana para capturar:
// Obtener todas las ventanas abiertas
var openWindows = GetOpenWindows(); // La implementación depende de tu enfoque
// Presentar la lista al usuario para selección
// Una vez seleccionada, obtener el handle de la ventana
// Configurar la captura con el handle de ventana seleccionado
VideoCapture1.Screen_Capture_Source = new ScreenCaptureSourceSettings
{
WindowHandle = selectedWindowHandle,
// Configuración adicional...
};
Selección de Región Dinámica¶
Permitir a los usuarios seleccionar interactivamente una región de pantalla para capturar:
// Crear un formulario con fondo transparente
var selectionForm = new Form
{
FormBorderStyle = FormBorderStyle.None,
WindowState = FormWindowState.Maximized,
Opacity = 0.3,
BackColor = Color.Black
};
// Agregar manejadores de eventos de ratón para rastrear el rectángulo de selección
// Una vez completada la selección
// Configurar captura con la región seleccionada
VideoCapture1.Screen_Capture_Source = new ScreenCaptureSourceSettings
{
Left = selection.Left,
Top = selection.Top,
Width = selection.Width,
Height = selection.Height,
// Configuración adicional...
};
Solución de Problemas Comunes¶
Captura en Blanco o Negra¶
Si el contenido capturado aparece en blanco o negro:
- Verifica que tienes permisos apropiados para la ventana o pantalla
- Comprueba si la aplicación usa aceleración por hardware que podría conflictuar con la captura
- Prueba versiones alternativas de DirectX (9 vs 11/12)
- Para contenido protegido (como video DRM), la captura puede estar bloqueada por mecanismos de seguridad
Problemas de Rendimiento¶
Si experimentas captura lenta o con interrupciones:
- Reduce la resolución de captura y/o tasa de fotogramas
- Usa DirectX 11/12 en lugar de DirectX 9 cuando esté disponible
- Cierra aplicaciones de fondo innecesarias
- Verifica que la aceleración por hardware está habilitada cuando sea aplicable
Conclusión¶
La funcionalidad de captura de pantalla permite a los desarrolladores crear aplicaciones potentes para demostración, educación, soporte y entretenimiento. Video Capture SDK .Net proporciona un framework robusto para implementar esta funcionalidad con mínimo esfuerzo de desarrollo.
Aprovechando las opciones de configuración apropiadas para tus requisitos específicos, puedes implementar características de captura de pantalla de alto rendimiento en tus aplicaciones .NET.
Visita nuestra página de GitHub para obtener más muestras de código.