2011-08-12 37 views
5

tôi sử dụng đoạn mã sau để chụp màn hình với chức năng GDI:Làm thế nào để tăng tốc độ BitBlt để chụp màn hình với aero?

// Prologue: 

int iScreenWidth = GetSystemMetrics(SM_CXSCREEN); 
int iScreenHeight = GetSystemMetrics(SM_CYSCREEN); 

HDC hScreenDC = GetDC(0); 
HDC hCaptureDC = CreateCompatibleDC(hScreenDC); 
HBITMAP hCaptureBitmap = CreateCompatibleBitmap(hScreenDC, iScreenWidth, iScreenHeight); 
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hCaptureDC, hCaptureBitmap); 

// Capture: 

BitBlt(hCaptureDC, 0, 0, iScreenWidth, iScreenHeight, hScreenDC, 0, 0, SRCCOPY); 

// --- ... --- // 

// Epilogue: 

SelectObject(hCaptureDC, hOldBitmap); 
DeleteObject(hCaptureBitmap); 
DeleteDC(hCaptureDC); 
ReleaseDC(0, hScreenDC); 

Vấn đề là: chức năng bitblt là CÁCH chậm khi Aero được bật - phải mất gần 50 mili giây (đó là không thể chấp nhận đối với tôi vì Tôi cần chụp nhiều lần trong giây).

BitBlt lấy dữ liệu pixel trực tiếp từ phần cứng video. Nhưng card màn hình khá tốt trong các máy thử nghiệm của tôi (cụ thể là Radeon 5470 và Radeon 4850), vì vậy tôi không hiểu có gì sai. Tôi biết các thẻ này (bất kỳ thẻ hiện đại) không phải là tốt trong 2D như họ đang ở trong 3D, nhưng hoạt động blit đơn giản không nên mất 50ms anyway tôi nghĩ.

Vì vậy, bạn có thể xin lời khuyên phải làm gì không? Bất kỳ loại "hackish" giải pháp (miễn là nó làm việc ổn định) sẽ làm trong trường hợp của tôi.

Hệ thống đích là Win7 x64, mã 32 bit.

Cảm ơn trước!

+1

Trong Aero, máy tính để bàn được tổng hợp từ các bitmap bộ nhớ riêng lẻ của tất cả các cửa sổ to. Nó cho phép các tính năng như hình thu nhỏ cửa sổ trực tiếp và Aero Peek. Điều này tất nhiên không đến miễn phí và sẽ không được trong bất kỳ cách nào phần cứng tăng tốc cho BitBlt. Bạn thực sự nên bật tùy chọn CAPTUREBLT. Tôi nghi ngờ nó tạo ra nhiều sự khác biệt. –

Trả lời

0

BitBlt performance with Aero enabled có liên quan. Ngoài ra còn có một phương pháp cửa sổ để vô hiệu hoá aero. Tôi cũng đã gặp sự cố khi nhận được hơn 15 khung hình/giây từ aero. Kỳ dị.

Các vấn đề liên quan