Guest User

Untitled

a guest
Mar 23rd, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 KB | None | 0 0
  1. public enum ScreenShotType { Primary, Secondary, AllDisplay };
  2.  
  3. /// <summary>
  4. /// 指定されたパスにスクリーンショットを保存します
  5. /// </summary>
  6. /// <param name="filePass">この名前で画像を保存する</param>
  7. /// <param name="type"></param>
  8. /// <remarks>
  9. /// 画像はpngで出力されます。
  10. /// プライマリ、セカンダリ、全てのディスプレイと対応しています。
  11. /// セカンダリの場合は、デバイス名から昇順で先頭のディスプレイを選択します。
  12. /// (ディスプレイが1つの場合はプライマリディスプレイが保存されます)
  13. /// 全てのディスプレイは1枚の画像に全ての領域を保存します。
  14. /// </remarks>
  15. public static void SaveScreenShot(string filePass, ScreenShotType type)
  16. {
  17.  
  18. switch (type)
  19. {
  20. case ScreenShotType.Primary:
  21.  
  22. // スクリーンショット作成 (プライマリ)
  23. {
  24. var rect = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
  25. var bmp = new System.Drawing.Bitmap(rect.Width, rect.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
  26.  
  27. using (var g = System.Drawing.Graphics.FromImage(bmp))
  28. {
  29. g.CopyFromScreen(rect.X, rect.Y, 0, 0, rect.Size, System.Drawing.CopyPixelOperation.SourceCopy);
  30. }
  31.  
  32. // 保存
  33. bmp.Save(filePass, System.Drawing.Imaging.ImageFormat.Png);
  34. }
  35.  
  36. break;
  37.  
  38. case ScreenShotType.Secondary:
  39.  
  40. // スクリーンショット作成 (セカンダリ)
  41. {
  42.  
  43. Rectangle rect;
  44. if (System.Windows.Forms.Screen.AllScreens.Count() > 1)
  45. {
  46. rect = System.Windows.Forms.Screen.AllScreens.Where(a => a.Primary == false).OrderBy(b => b.DeviceName).Take(1).First().Bounds;
  47. }
  48. else
  49. {
  50. // ディスプレイが1つのときはプライマリにする
  51. rect = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
  52. }
  53.  
  54. var bmp = new System.Drawing.Bitmap(rect.Width, rect.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
  55.  
  56. using (var g = System.Drawing.Graphics.FromImage(bmp))
  57. {
  58. g.CopyFromScreen(rect.X, rect.Y, 0, 0, rect.Size, System.Drawing.CopyPixelOperation.SourceCopy);
  59. }
  60.  
  61. // 保存
  62. bmp.Save(filePass, System.Drawing.Imaging.ImageFormat.Png);
  63. }
  64.  
  65. break;
  66.  
  67. case ScreenShotType.AllDisplay:
  68.  
  69. // スクリーンショット作成 (マルチディスプレイ対応)
  70. {
  71. var screen = System.Windows.Forms.Screen.AllScreens.OrderByDescending(a => a.Bounds.X + a.Bounds.Y).Take(1).First();
  72. var rect = new System.Drawing.Rectangle(0, 0, screen.Bounds.X + screen.Bounds.Width, screen.Bounds.Y + screen.Bounds.Height);
  73. var bmp = new System.Drawing.Bitmap(rect.Width, rect.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
  74.  
  75. using (var g = System.Drawing.Graphics.FromImage(bmp))
  76. {
  77. g.CopyFromScreen(0, 0, 0, 0, rect.Size, System.Drawing.CopyPixelOperation.SourceCopy);
  78. }
  79.  
  80. // 保存
  81. bmp.Save(filePass, System.Drawing.Imaging.ImageFormat.Png);
  82.  
  83. }
  84.  
  85. break;
  86. }
  87.  
  88. }
Add Comment
Please, Sign In to add comment