CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 305

305

Chương 8: Đồ họa, đa phương tiện, và in ấn

Bước kế tiếp là tạo một client có thể sử dụng chức năng này. Form dưới đây (xem hình 8.6) sẽ
hiển thị bức hình chụp được trong một

PictureBox

(nằm trong một

Panel

cuộn được, như đã

được mô tả trong mục 8.5).

public class ScreenCapture : System.Windows.Forms.Form {

private System.Windows.Forms.PictureBox pictureBox1;

private System.Windows.Forms.Panel panel1;

// (Bỏ qua phần mã designer.)

private void cmdCapture_Click(object sender, System.EventArgs e) {

pictureBox1.Image = DesktopCapture.Capture();

pictureBox1.Size = pictureBox1.Image.Size;

}

}

7.

7.

S d ng “double buffering” đ tăng t c đ v l i

ử ụ

ố ộ ẽ ạ

S d ng “double buffering” đ tăng t c đ v l i

ử ụ

ố ộ ẽ ạ

Bạn cần tối ưu thao tác vẽ đối với một form thường xuyên được làm tươi, và bạn
muốn giảm hiện tượng rung hình (flicker
).

Biểu diễn hình ảnh ở dạng hình bitmap trong-bộ-nhớ, rồi chép hình bitmap đã
hoàn chỉnh vào form.

Trong một vài ứng dụng, bạn thường xuyên phải vẽ lại form hoặc điều kiểm. Điều này thường
gặp khi thể hiện animation (hình động). Ví dụ, bạn có thể sử dụng

Timer

để làm mất hiệu lực

form mỗi giây. Khi đó, đoạn mã thực hiện thao tác vẽ có thể vẽ lại một bức hình tại một vị trí
mới, tạo cảm giác động. Cách tiếp cận này có một vấn đề: mỗi lần bạn làm mất hiệu lực form,
Windows sẽ vẽ lại nền cửa sổ (xóa form), và rồi chạy đoạn mã thực hiện thao tác vẽ. Điều này
có thể gây ra rung hình đáng kể.
“Double buffering” là một kỹ thuật bạn có thể hiện thực để giảm hiện tượng rung hình. Với
“double buffering”, logic vẽ sẽ ghi một hình bitmap trong-bộ-nhớ, và hình này được chép lên
form vào cuối quá trình vẽ bằng một thao tác vẽ lại đơn lẻ trong suốt, nhờ đó mà hiện tượng
rung hình giảm một cách đáng kể.
Bước đầu tiên khi hiện thực “double buffering” là phải bảo đảm nền của form không tự động
được vẽ lại khi form bị mất hiệu lực. Đây là nguyên nhân lớn nhất gây ra rung hình vì nó thay
thế bức hình của bạn bằng một frame trống (giả dụ chỉ là một phần nhỏ của một giây). Để
ngăn việc vẽ nền, bạn cần chép đè phương thức

OnPaintBackground

của form để nó không

nhận hành động nào. Bước thứ hai là sửa đổi đoạn mã thực hiện thao tác vẽ để nó vẽ bức hình
thành một hình bitmap trong-bộ-nhớ. Khi hoàn tất, hình bitmap được chép vào form. Cách
tiếp cận này bảo đảm làm tươi là một thao tác vẽ lại đơn lẻ, và drawing logic tốn nhiều thời
gian đó sẽ không gây ra hiện tượng rung hình.

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.