2013-02-05 30 views
5

Tôi đã cố gắng để xây dựng một máy ghi màn hình để thực hành kỹ năng Java teo của tôi (mặc dù đã có quá nhiều).Những lý do kỹ thuật, cơ bản đằng sau Robot(). CreateScreenCapture() là quá chậm?

Tuy nhiên, tôi đã đến khi vấn đề của lớp Robot đang ridiculously chậm - khoảng 15fps ngay cả trên i7 của tôi hỗ trợ máy, và thu thập 4-5fps trên macbook của tôi. Tôi đã xây dựng một máy ghi âm làm việc với Python và đã có thể đạt được ít nhất 20-24fps đáng tin cậy bằng cách lấy ảnh chụp nhanh với PIL.

Vì vậy, tôi tò mò, lý do kỹ thuật cho lớp học quá chậm?

Hơn nữa, các trình ghi màn hình khác hoạt động như thế nào? Screencast-o-matic là Java và có vẻ hoạt động tốt. Tôi cho rằng có một số cách để kết nối với hệ điều hành bên dưới, và tách tất cả mọi thứ ra khỏi bộ đệm hay gì đó? Tôi hình dung rằng phải có một số cách cực kỳ nhanh chóng để có được bản sao của những gì đang được vẽ trên màn hình - Sau khi tất cả, hệ điều hành là đủ nhanh để vẽ màn hình nhiều lần sau khi tất cả trong khi thực hiện một tính toán kajillion khác! Có vẻ như việc sao chép một mảng màu từ nơi này sang nơi khác nên là một hoạt động tương đối rẻ.

Tôi quyết tâm không từ bỏ! Tôi chỉ không biết những gì tôi cần biết để thực sự đi sâu vào thịt xây dựng một máy ghi thích hợp.

+5

[link] này (http://www.rune-server.org/programming/application-development/387765-directrobot-fast-java-robot-allows-screen-recording.html) có thể giúp trả lời câu hỏi của bạn và cung cấp một giải pháp có thể ... – MadProgrammer

+0

Robot là gì? – Andremoniy

+0

Bạn có thể thử JNA thay vào đó, nó có khả năng nhanh hơn nhiều. http://stackoverflow.com/questions/4433994/java-window-image –

Trả lời

1

Tôi không chắc chắn lắm. nhưng vẫn là một lý do rất có thể.

hệ điều hành: hệ điều hành đã vẽ màn hình. nó làm cho cảm giác rằng, nó có đồ họa được lưu trữ cho đến khi có một cái gì đó happense mới. một hình ảnh có thể dễ dàng được lưu lại.

Robot java: robot thu thập dữ liệu trước khi có thể lưu trữ dữ liệu. ảnh chụp màn hình sử dụng Phương thức. Phương thức là getPixelColor(). nó tạo ra một vòng lặp lớn để có được tất cả các điểm ảnh trên màn hình. trên màn hình HD, phương pháp này được gọi là 921600 lần (1280 * 720), điều này cần có thời gian cộng với nó cần được nén thành hình ảnh và được lưu.

+0

+1 Tôi chỉ xem mã nguồn cho Robot, Raster có thể ghi và các lớp khác có hình ảnh màn hình. –

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