Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public enum ScreenShotType { Primary, Secondary, AllDisplay };
- /// <summary>
- /// 指定されたパスにスクリーンショットを保存します
- /// </summary>
- /// <param name="filePass">この名前で画像を保存する</param>
- /// <param name="type"></param>
- /// <remarks>
- /// 画像はpngで出力されます。
- /// プライマリ、セカンダリ、全てのディスプレイと対応しています。
- /// セカンダリの場合は、デバイス名から昇順で先頭のディスプレイを選択します。
- /// (ディスプレイが1つの場合はプライマリディスプレイが保存されます)
- /// 全てのディスプレイは1枚の画像に全ての領域を保存します。
- /// </remarks>
- public static void SaveScreenShot(string filePass, ScreenShotType type)
- {
- switch (type)
- {
- case ScreenShotType.Primary:
- // スクリーンショット作成 (プライマリ)
- {
- var rect = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
- var bmp = new System.Drawing.Bitmap(rect.Width, rect.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
- using (var g = System.Drawing.Graphics.FromImage(bmp))
- {
- g.CopyFromScreen(rect.X, rect.Y, 0, 0, rect.Size, System.Drawing.CopyPixelOperation.SourceCopy);
- }
- // 保存
- bmp.Save(filePass, System.Drawing.Imaging.ImageFormat.Png);
- }
- break;
- case ScreenShotType.Secondary:
- // スクリーンショット作成 (セカンダリ)
- {
- Rectangle rect;
- if (System.Windows.Forms.Screen.AllScreens.Count() > 1)
- {
- rect = System.Windows.Forms.Screen.AllScreens.Where(a => a.Primary == false).OrderBy(b => b.DeviceName).Take(1).First().Bounds;
- }
- else
- {
- // ディスプレイが1つのときはプライマリにする
- rect = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
- }
- var bmp = new System.Drawing.Bitmap(rect.Width, rect.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
- using (var g = System.Drawing.Graphics.FromImage(bmp))
- {
- g.CopyFromScreen(rect.X, rect.Y, 0, 0, rect.Size, System.Drawing.CopyPixelOperation.SourceCopy);
- }
- // 保存
- bmp.Save(filePass, System.Drawing.Imaging.ImageFormat.Png);
- }
- break;
- case ScreenShotType.AllDisplay:
- // スクリーンショット作成 (マルチディスプレイ対応)
- {
- var screen = System.Windows.Forms.Screen.AllScreens.OrderByDescending(a => a.Bounds.X + a.Bounds.Y).Take(1).First();
- var rect = new System.Drawing.Rectangle(0, 0, screen.Bounds.X + screen.Bounds.Width, screen.Bounds.Y + screen.Bounds.Height);
- var bmp = new System.Drawing.Bitmap(rect.Width, rect.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
- using (var g = System.Drawing.Graphics.FromImage(bmp))
- {
- g.CopyFromScreen(0, 0, 0, 0, rect.Size, System.Drawing.CopyPixelOperation.SourceCopy);
- }
- // 保存
- bmp.Save(filePass, System.Drawing.Imaging.ImageFormat.Png);
- }
- break;
- }
- }
Add Comment
Please, Sign In to add comment