2011-04-18 15 views
9

El siguiente método se toma de una aplicación WinForms. Simplemente captura la pantalla, pero necesitaba modificarla para que funcione en una aplicación WPF. Cuando lo uso, devuelve una imagen negra. Las dimensiones son correctas. No tengo ningún DirectX o videos abierto y no funcionaría ni siquiera en mi escritorio.WPF - Graphics.CopyFromScreen devuelve una imagen en negro

public static Bitmap CaptureScreen() 
    { 
     // Set up a bitmap of the correct size 

     Bitmap CapturedImage = new Bitmap((int)SystemParameters.VirtualScreenWidth, 
      (int)SystemParameters.VirtualScreenHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 

     // Create a graphics object from it 
     System.Drawing.Size size = new System.Drawing.Size((int)SystemParameters.VirtualScreenWidth, (int)SystemParameters.VirtualScreenHeight); 

     using (Graphics g = Graphics.FromImage(CapturedImage)) 
     { 
      // copy the entire screen to the bitmap 
      g.CopyFromScreen((int)SystemParameters.VirtualScreenWidth, (int)SystemParameters.VirtualScreenHeight, 0, 0, 
       size, CopyPixelOperation.SourceCopy); 
     } 
     return CapturedImage; 
    } 

¿Alguien me puede mostrar el error en mi camino?

Respuesta

6

Creo que es necesario utilizar el método de interoperabilidad y BitBlt. This blog explica cómo se hace esto, y un follow-on post que muestra cómo obtener los bordes de la ventana.

1

creo que los dos primeros params a g.CopyFromScreen deben ser 0.

Aquí está el código que funciona para mí:

 var size = System.Windows.Forms.Screen.PrimaryScreen.Bounds; 
     var capture = new System.Drawing.Bitmap(size.Width, size.Height); 

     var g = System.Drawing.Graphics.FromImage(capture); 
     g.CopyFromScreen(0, 0, 0, 0, new System.Drawing.Size(size.Width, size.Height)); 
     g.Dispose(); 
+0

Todavía no funciona, de nuevo las dimensiones de la imagen parecen correctas, pero toda la imagen es negra. Gracias, sin embargo. – user646265

Cuestiones relacionadas