STDIO
Tìm kiếm gần đây
    Nội dung
    0
    0
    Chia sẻ

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

    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.
    Vũ Quang Huy

    Vũ Quang Huy

    28/09/2014
    25/09/2020
    3 phút đọc
    Chụp Ảnh Màn Hình Với 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

    0 Bình luận
    C# for Automation

    C# for Automation

    STDIO Training - Đào tạo C# Foundation & Advanced.

    Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO

    Trang chính

    Công ty TNHH STDIO

    • 30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
      +84 28.36205514 - +84 942.111912
      developer@stdio.vn
    • 383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
      Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012
    ©STDIO, 2013 - 2021