First Set Process DPI Aware:
Get Screen Size on C#
https://pupli.net/2020/03/get-screen-size-on-c/
Install-Package System.Drawing.Common -Version 7.0.0
Take screenshot and save to file
using System; using System.Drawing; using System.Windows.Forms; namespace ScreenshotExample { class Program { static void Main(string[] args) { // Get the bounds of the screen Rectangle bounds = Screen.PrimaryScreen.Bounds; // Create a bitmap object to store the screenshot using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height)) { // Create a graphics object from the bitmap using (Graphics g = Graphics.FromImage(bitmap)) { // Capture the screen g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size); } // Save the screenshot as a PNG file bitmap.Save("screenshot.png"); } Console.WriteLine("Screenshot saved as screenshot.png"); } } }
Take screenshot and save to memory
using System; using System.Drawing; using System.IO; using System.Windows.Forms; namespace ScreenshotToMemory { class Program { static void Main(string[] args) { // Get the bounds of the screen Rectangle bounds = Screen.PrimaryScreen.Bounds; // Create a bitmap object to store the screenshot using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height)) { // Create a graphics object from the bitmap using (Graphics g = Graphics.FromImage(bitmap)) { // Capture the screen g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size); } // Store the screenshot in memory using MemoryStream using (MemoryStream memoryStream = new MemoryStream()) { bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png); // Convert the MemoryStream to byte array byte[] screenshotBytes = memoryStream.ToArray(); // Now the screenshot is stored in screenshotBytes, you can use it as needed // For demonstration, let's output the length of the byte array Console.WriteLine($"Screenshot captured. Byte array length: {screenshotBytes.Length}"); } } } } }