ghoul
ghoul

Reputation: 1120

C# Screenshot Full Window

I'm trying to write a console app using .NET Framework. I want to screenshot my screen. I've used other answers on SO like this:

https://stackoverflow.com/a/24879511/9457997

The issue is that this doesn't capture my whole screen. It's missing about 1/5 on the bottom and the right side.

How can I capture my whole screen using C# .NET Framework?

Upvotes: 3

Views: 10133

Answers (4)

Akram Al-Qaifi
Akram Al-Qaifi

Reputation: 650

// Capture the screen
Bitmap screenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics graphics = Graphics.FromImage(screenshot);
graphics.CopyFromScreen(0, 0, 0, 0, screenshot.Size);

// Display the screenshot on the picture box
pictureBox1.Image = screenshot;

Upvotes: 0

TheProgrammer
TheProgrammer

Reputation: 58

I have unfortunately not found a way to screenshot from a console application, but here is my way to screenshot and let the user pick where to save the pic by using SaveFileDialog.

For the following code, you will need these three references:

using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;

You can attach this code to a button or an event:

Bitmap bt = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(bt);
g.CopyFromScreen(0, 0, 0, 0, bt.Size);
SaveFileDialog sfd = new SaveFileDialog();
sfd.ShowDialog();
string name = sfd.FileName + ".jpg";
bt.Save(name, ImageFormat.Jpeg);

Upvotes: 0

Jeremy Thompson
Jeremy Thompson

Reputation: 65534

Use VirtualScreen:

int screenLeft = SystemInformation.VirtualScreen.Left;
int screenTop = SystemInformation.VirtualScreen.Top;
int screenWidth = SystemInformation.VirtualScreen.Width;
int screenHeight = SystemInformation.VirtualScreen.Height;

// Create a bitmap of the appropriate size to receive the full-screen screenshot.
using (Bitmap bitmap = new Bitmap(screenWidth, screenHeight))
{
    // Draw the screenshot into our bitmap.
    using (Graphics g = Graphics.FromImage(bitmap))
    {
        g.CopyFromScreen(screenLeft, screenTop, 0, 0, bitmap.Size);
    }

    //Save the screenshot as a Jpg image
    var uniqueFileName = "C:\\temp\\a.Jpg";
    try
    {
        bitmap.Save(uniqueFileName, ImageFormat.Jpeg);
    }
    catch (Exception ex) {
    }
 }

Upvotes: 5

mr.coffee
mr.coffee

Reputation: 1018

You can use Screen.PrimaryScreen.Bounds; to get the bounds of your screen.

Rectangle bounds = Screen.PrimaryScreen.Bounds;
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
using (Graphics g = Graphics.FromImage(bitmap))
{
    g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);
    bitmap.Save("C://test.jpg", ImageFormat.Jpeg);
}

You will need to reference System.Drawing, System.Drawing.Imaging and System.Windows.Forms for this code sample to work in a Console application.

Upvotes: 2

Related Questions