Снимок экрана со второго экрана
Привет, я работаю над программой, в которой пользователь может делать снимки экрана. Пользователи могут выбрать, хотят ли они сделать снимок экрана с экрана 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
.