Estoy tratando de integrar una función de captura de pantalla en mi aplicación WPF y me gustaría que parezca una herramienta para cortar.captura de pantalla C# WPF con efecto SnippingTool
Hasta ahora he logrado lograr algo similar creando una ventana de pantalla completa (con un lienzo) con una opacidad establecida en 0,5 y fondo oscuro. Cuando hago clic en algún lugar y empiezo a arrastrar, se dibuja un rectángulo blanco que genera un efecto similar al this.
Lo que me gustaría tener es que la parte interior de ese rectángulo abra un orificio de opacidad en el lienzo de fondo, de forma que pueda ver a través del área seleccionada, como si se tratara de una herramienta de recorte.
El problema es que, siendo bastante nuevo en .NET, no tengo idea de cómo o dónde comenzar. Hice algunas investigaciones y pruebas en el campo OpacityMask de la ventana de captura de pantalla pero no llegó a ninguna parte.
Aquí hay un little vid para mostrar el efecto actual.
Editar:
Además, como cuestión de bonificación, ¿hay una manera fácil de capturar una captura de pantalla que abarca varios monitores (pantalla virtual)?
Graphics.CopyFromScreen()
solo parece funcionar para 1 pantalla.
Ya fija esto y parece que funciona para todos los posibles diseños de escritorio virtuales extraños:
// Capture screenie (rectangle is the area previously selected
double left = Canvas.GetLeft(this.rectangle);
double top = Canvas.GetTop(this.rectangle);
// Calculate left/top offset regarding to primary screen (where the app runs)
var virtualDisplay = System.Windows.Forms.SystemInformation.VirtualScreen;
var primaryScreen = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
if (virtualDisplay.Left < primaryScreen.Left)
{
left -= Math.Abs(virtualDisplay.Left - primaryScreen.Left);
}
if (virtualDisplay.Top < primaryScreen.Top)
{
top -= Math.Abs(virtualDisplay.Top - primaryScreen.Top);
}
Relevante: http://stackoverflow.com/questions/3123776/net-equivalent-of-snipping-tool/3124252#3124252 –
veo que ha tomado el enfoque de agarrar una captura de pantalla de escritorio. Tiene sentido, ¡aunque como que quería evitarlo! Además, me he dado cuenta de que CopyFromScreen puede alimentarse con coordenadas negativas (por ejemplo, si mi otra pantalla está a la izquierda de la principal), así que ahora solo es cuestión de matemáticas :) – biasedbit
Si miras de cerca, la herramienta de recorte también está agarrando una captura de pantalla de escritorio –