2016-07-21 4 views
0

Ich habe ein Formular, mit panel1 und panel1 ist von grünem Hintergrund und das Formular TransparencyKey ist auch auf grün und jetzt statt Panel, was dahinter ist angezeigt. So habe ich einen Knopf, und hinzugefügt diesen Code auf den Bildschirm zu erfassen, die ich durch die Tafel sehen:Wie man den Bildschirm hinter einem durchsichtigen Panel

Bitmap bmp = new Bitmap(panel1.Width, panel1.Height); 
panel1.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height)); 
bmp.Save(@"F:\Image.bmp"); 
MessageBox.Show("Save Complete!"); 

Aber das Bild ist von grüner Farbe nur gespeichert! Irgendeine Möglichkeit zu speichern, was hinter dem panel1 auf dem Bildschirm angezeigt wird?

Antwort

0

Sie können Graphics.CopyFromScreen Methode verwenden, um einen Screenshot des Bildschirms zu erhalten. Hier ist eine Methode, die Sie einen Screenshot von gegebenen Grenzen des Bildschirms erhalten hilft:

public Bitmap GetDesktopImage(Rectangle bounds) 
{ 
    var bm = new Bitmap(bounds.Width, bounds.Height); 
    using (Graphics g = Graphics.FromImage(bm)) 
    { 
     g.CopyFromScreen(bounds.Location, new Point(0, 0), bounds.Size); 
    } 
    return bm; 
} 

Dann ist es genug, um die Bildschirm Grenzen des Panels an die Methode übergeben. Um die Bildschirm Grenzen des Panels zu erhalten, können Sie seine Bound Eigenschaft RectangleToScreen Methode seiner Parent passieren:

var bounds = panel1.Parent.RectangleToScreen(panel1.Bounds); 
var image = GetDesktopImage(bounds); 
//image.Save(@"d:\bm.png", System.Drawing.Imaging.ImageFormat.Png);