Sto cercando di integrare una funzione di acquisizione degli screenshot nella mia app WPF e mi piacerebbe che assomigliasse a uno strumento di cattura.Cattura screenshot C# WPF con effetto SnippingTool
Finora sono riuscito a realizzare qualcosa di simile creando una finestra a schermo intero (con una tela) con opacità impostata su 0,5 e sfondo scuro. Quando clicco da qualche parte e inizio a trascinare, viene disegnato un rettangolo bianco, generando un effetto simile a this.
Quello che mi piacerebbe avere è la parte interna di quel rettangolo che apre un buco di opacità nella tela di sfondo, in modo da poter vedere attraverso l'area selezionata - proprio come lo strumento di cattura.
Il problema è che, essendo abbastanza nuovo per .NET, non ho idea di come o da dove iniziare. Ha fatto qualche ricerca e test sul campo OpacityMask della finestra dello screenshot ma non ha ottenuto nulla.
Ecco uno little vid per mostrare l'effetto corrente.
Modifica:
Inoltre, come domanda bonus, c'è un modo semplice per catturare uno screenshot che si estende su più monitor (schermo virtuale)?
Graphics.CopyFromScreen()
sembra funzionare solo per 1 schermo.
già fissato questo e sembra funzionare per tutti i possibili layout del desktop virtuali strani:
// 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);
}
Rilevante: http://stackoverflow.com/questions/3123776/net-equivalent-of-snipping-tool/3124252#3124252 –
vedo che hai preso l'approccio di afferrare uno screenshot del desktop. Ha senso, anche se in qualche modo volevo evitarlo! Inoltre, ho capito che CopyFromScreen può essere alimentato con coordinate negative (diciamo se il mio altro schermo è a sinistra del main) quindi ora è solo una questione di matematica :) – biasedbit
Se guardi da vicino, lo strumento di cattura sta anche afferrando un'immagine del desktop –