Search…

Chụp Ảnh Màn Hình Với C# Trong 5 Bước

25/09/20203 min read
Hướng dẫn xây dựng ứng dụng bằng C# thực hiện thao tác chụp ảnh màn hình và tự động lưu lại theo định dạng chọn trước trong 5 bước.

Việc chụp lại màn hình làm việc hiện tại thường được thực hiện bằng cách sử dụng phím Print Screen. Ảnh sau khi chụp sẽ được lưu vào bộ nhớ và phải dùng Paint hay tương tự để lưu lại bức ảnh vừa chụp. Khi công việc yêu cầu phải chụp màn hình lại nhiều lần như viết tài liệu mô tả, việc lặp đi lặp lại các thao tác này sẽ tốn nhiều công sức.

Bài viết hướng dẫn cách xây dựng một ứng dụng bằng C# giúp chụp ảnh màn hình và lưu lại tức thì chỉ trong 5 bước.

Xây dựng ứng dụng

Khởi đầu với việc tạo một project C# trống, loại ứng dụng là Console và đặt tên STDIO_ScreenCapture.

ss_1


 
Project sau khi khởi tạo có nội dung như sau.

ss_2

Bước 1: Khai báo đối tượng Bitmap và Graphic

Mặc định, project được tạo dưới dạng Console Application sẽ không tham chiếu đến thư viện System.Drawing. Do đó, chương trình sẽ báo lỗi nếu đối tượng Bitmap được thêm vào.

Để khắc phục vấn đề này, tại cửa sổ Solution Explorer

  • Click phải vào References > Add Reference …
  • Tại mục Framework, trong danh sách các thư viện khả dụng, tick chọn System.Drawing
  • Chọn OK để hoàn tất việc thêm thư viện tham chiếu.
ss_3

 Sau đó, khai báo với chương trình sẽ sử dụng thư viện System.Drawing

using System.Drawing;

Và khai báo 2 đối tượng Bitmap, Graphics trong lớp Program

private static Bitmap screenBitmap;
private static Graphics screenGraphics;

Bước 2: Tạo hộp thoại xác nhận việc lưu ảnh

Hộp thoại sử dụng trong trường hợp này là SaveFileDialog thuộc thư viện System.Windows.Forms và cần được tham chiếu tương tự như thư viện System.Drawing.

Trong hàm main, tiến hành tạo đối tượng dialog và hiển thị. Hộp thoại này sẽ trả về kiểu DialogResult và chỉ xử lý nếu người dùng chọn OK.

SaveFileDialog saveDialog = new SaveFileDialog();

// Set filter options and filter index.
saveDialog.Filter = "PNG Files (.png)|*.png|All Files (*.*)|*.*";
saveDialog.FilterIndex = 1;

if (saveDialog.ShowDialog() == DialogResult.OK)
{
}

Biên dịch và chạy thử chương trình, hộp thoại save hiện lên như hình bên dưới

ss_4


 
Nếu chương trình kết thúc với lỗi ThreadStateException thì cần thêm chỉ dẫn [STAThread] ngay trước hàm main.

[STAThread]
static void Main(string[] args)

Bước 3: Khởi tạo đối tượng Bitmap và Graphics

Các đối tượng này được khởi tạo khi và chỉ khi người dùng chọn đồng ý lưu file. Đối tượng Bitmap được tạo ra có kích thước bằng với kích thước màn hình hiện hành.

screenBitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
                            Screen.PrimaryScreen.Bounds.Height, 
                            PixelFormat.Format32bppArgb);                
screenGraphics = Graphics.FromImage(screenBitmap);

Bước 4:  Lưu ảnh màn hình vào đối tượng Bitmap

Thao tác này được thực hiện như sau:

screenGraphics.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 
                        0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);

Bước 5: Xuất nội dung được lưu ra file

Từ đối tượng Bitmap, gọi phương thức Save với 2 tham số:

  • filename: đường dẫn lưu file, có thể lấy thông qua đối tượng SaveFileDialog
  • format: định dạng ảnh muốn lưu, ví dụ: PNG
screenBitmap.Save(saveDialog.FileName, ImageFormat.Png);

Code hoàn chỉnh của chương trình:

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

namespace STDIO_ScreenCapture
{
    class Program
    {
        private static Bitmap screenBitmap;
        private static Graphics screenGraphics;

        [STAThread]
        static void Main(string[] args)
        {
            SaveFileDialog saveDialog = new SaveFileDialog();
            // Set filter options and filter index.
            saveDialog.Filter = "PNG Files (.png)|*.png|All Files (*.*)|*.*";
            saveDialog.FilterIndex = 1;

            if (saveDialog.ShowDialog() == DialogResult.OK)
            {
                screenBitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
                                            Screen.PrimaryScreen.Bounds.Height, 
                                            PixelFormat.Format32bppArgb);                
                screenGraphics = Graphics.FromImage(screenBitmap);
                screenGraphics.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 
                                        0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
                screenBitmap.Save(saveDialog.FileName, ImageFormat.Png);
            }
        }
    }
}

Khả năng mở rộng

Ứng dụng có thể được viết lại như một dịch vụ chạy ngầm và thao tác chụp ảnh màn hình chỉ được kích hoạt khi một tổ hợp phím được nhấn. Ngoài ra, tích hợp cơ chế đánh tên ảnh tự động ví dụ như ss_1.png, ss_2.png … và cho chọn nơi lưu toàn bộ các screenshot này.

Download ứng dụng mẫu

Yêu cầu hệ thống:

  • Windows 8.1 Pro (64-bit)
  • Visual Studio 2013 Community
  • .NET Framework 4.5.

Download: STDIO_ScreenCapture_VS2013.zip

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024