2012-04-04 4 views
1

スクリーンキャプチャを取得し、画面全体のpng形式で保存したいと考えています。どうやってやるの?png形式のデスクトップキャプチャ

これを行うにはSnipping Toolライブラリを使用できますか?インターネットでは、Windowsフォームでこれを行う方法を示すチュートリアルがあり、イメージはビットマップ形式です。

答えて

8

ここでは、どの画面のコンテンツをキャプチャするための小さな方法です。使い方の

private static void CaptureScreen(Screen window, string file) 
    { 
     try 
     { 
      Rectangle s_rect = window.Bounds; 
      using (Bitmap bmp = new Bitmap(s_rect.Width, s_rect.Height)) 
      { 
       using (Graphics gScreen = Graphics.FromImage(bmp)) 
        gScreen.CopyFromScreen(s_rect.Location, Point.Empty, s_rect.Size); 
       bmp.Save(file, System.Drawing.Imaging.ImageFormat.Png); 
      } 
     } 
     catch (Exception) { /*TODO: Any exception handling.*/ } 
    } 

例:

CaptureScreen(Screen.PrimaryScreen, @"B:\exampleScreenshot.png"); 

EDIT:後、私はあなたが使用する方法を選択することができますので、それは関数からImageオブジェクトを返すために、おそらくより便利だ実現はこれに戻って来るキャプチャビットマップ。

私はこの機能をもう少し堅牢にして、複数の画面をキャプチャできるようにしました(マルチモニタの設定など)。それはは、さまざまな高さの画面に対応する必要がありますが、私はこれを自分でテストすることはできません。

public static Image CaptureScreens(params Screen[] screens) { 
    if (screens == null || screens.Length == 0) 
     throw new ArgumentNullException("screens"); 

    // Order them in logical left-to-right fashion. 
    var orderedScreens = screens.OrderBy(s => s.Bounds.Left).ToList(); 
    // Calculate the total width needed to fit all the screen into a single image 
    var totalWidth = orderedScreens.Sum(s => s.Bounds.Width); 
    // In order to handle screens of different sizes, make sure to make the Bitmap large enough to fit the tallest screen 
    var maxHeight = orderedScreens.Max(s => s.Bounds.Top + s.Bounds.Height); 

    var bmp = new Bitmap(totalWidth, maxHeight); 
    int offset = 0; 

    // Copy each screen to the bitmap 
    using (var g = Graphics.FromImage(bmp)) { 
     foreach (var screen in orderedScreens) { 
      g.CopyFromScreen(screen.Bounds.Left, screen.Bounds.Top, offset, screen.Bounds.Top, screen.Bounds.Size); 
      offset += screen.Bounds.Width; 
     } 
    } 

    return bmp; 
} 

新例:

// Capture all monitors and save them to file 
CaptureScreens(Screen.AllScreens).Save(@"C:\Users\FooBar\screens.png"); 
関連する問題