Снимок экрана со второго экрана

Привет, я работаю над программой, в которой пользователь может делать снимки экрана. Пользователи могут выбрать, хотят ли они сделать снимок экрана с экрана 1,2,3 или 4. Я знаю, как вытащить первый снимок экрана с первого экрана, но как мне получить изображения с экрана 2,3 и 4?

Мой код, чтобы получить снимок экрана с первого экрана, выглядит следующим образом:

 private void btnScreenOne_Click(object sender, EventArgs e) 
 {
     Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
         Screen.PrimaryScreen.Bounds.Height);

     Graphics graphics = Graphics.FromImage(bitmap as Image);

     graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);

     bitmap.Save(@"C:\Users\kraqr\Documents\PrintScreens\" + 
        DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + " Screen1" + 
        ".bmp", ImageFormat.Bmp);

}

Благодарен за ответы.

Ответ 1

Класс Screen имеет статическое свойство AllScreens, которое дает вам массив экранов. Эти объекты имеют свойство Bounds, которое вы, безусловно, можете использовать...

Короче говоря: вы инициализируете растровое изображение размером нужного экрана (не используйте PrimaryScreen, потому что это только первичный, как следует из названия), а затем передайте соответствующие границы CopyFromScreen.

Ответ 2

Вместо этого используйте Screen.AllScreens:

foreach ( Screen screen in Screen.AllScreens )
{
    screenshot = new Bitmap( screen.Bounds.Width,
        screen.Bounds.Height,
        System.Drawing.Imaging.PixelFormat.Format32bppArgb );
    // Create a graphics object from the bitmap
    gfxScreenshot = Graphics.FromImage( screenshot );
    // Take the screenshot from the upper left corner to the right bottom corner
    gfxScreenshot.CopyFromScreen(
        screen.Bounds.X,
        screen.Bounds.Y, 
        0, 
        0,
        screen.Bounds.Size,
        CopyPixelOperation.SourceCopy );
    // Save the screenshot
}

Ответ 3

Используйте Screen.AllScreens, чтобы получить координаты с помощью свойства Bounds конкретного экрана и передать их в CopyFromScreen.