Tôi có ứng dụng MDI được viết bằng Qt. Một số cửa sổ phụ bao gồm QGLWidget
s, tức là ngữ cảnh OpenGL. Điểm nổi bật nhất trong số này là sử dụng các vertex của OpenGL và các phần shader fragment để hiển thị dữ liệu của chúng.Ứng dụng Qt MDI với OpenGL: cách lấy ảnh chụp màn hình hợp lệ?
tôi cần phải lập trình chụp ảnh màn hình của cửa sổ chính của ứng dụng, bao gồm tất nhiên tất cả các subwindows điều đó xảy ra để được nhìn thấy. Âm thanh dễ dàng lúc đầu ("chắc chắn đã được hỏi nhiều lần, vì vậy hãy chỉ google nó!"), Nhưng sau khi một cái nhìn gần hơn nó có vẻ là nhận được một chút khôn lanh ...
Bây giờ đây là những gì tôi đã cố gắng cho đến nay :
QPixmap::grabWidget
không hoạt động cho các cửa sổ phụ sử dụng các chương trình đổ bóng, rõ ràng vì ngữ cảnh chuyển hướng dường như không hỗ trợ các tiện ích OpenGL cần thiết. (Mã vẽ kiểm tra rằng bối cảnh liên quan đến hỗ trợ các phần mở rộng cần thiết, và từ chối để tiếp tục nếu không muốn nói.)QPixmap::grabWindow
âm thầm rời khỏi tất cả các bối cảnh OpenGL trống - ngay cả những người sử dụng nguyên thủy cơ bản mà thôi.QGLWidget::grabFrameBuffer
hoạt động, nhưng chỉ ghi lại ngữ cảnh OpenGL của cửa sổ phụ cụ thể, trong khi tôi muốn lấy toàn bộ ứng dụng (về cơ bản những gìAlt+PrtScr
thực hiện trong Windows).
Tôi cũng đã thử làm # 2 đầu tiên và sau đó lặp # 3 cho tất cả các cửa sổ phụ, chỉ cần sao chép kết quả của # 3 vào đúng vị trí của hình ảnh từ # 2. Điều này làm việc rất tốt, cho đến khi tôi thực hiện một số subwindows chồng lên nhau - trong trường hợp này các hình ảnh từ # 3 ghi đè lên các khung subwindow, vv Vì vậy, phương pháp này có lẽ sẽ đòi hỏi mã nhiều hơn nữa để xử lý tất cả các trường hợp góc khó chịu ...
một số nền thêm: Khi tôi nhận được ảnh chụp màn hình, tôi sẽ đưa một số trong số họ trong một seqence để tạo ra một video - có lẽ sử dụng ffmpeg. Điều đó làm cho câu hỏi này trở thành một dạng tiếp nối (phần đầu tiên) my previous question; nó chỉ là ứng dụng đã phát triển từ một chương trình OpenGL độc lập theo ngữ cảnh duy nhất đến một cái gì đó sử dụng Qt cho cửa sổ tổng thể và tiện ích con giao diện người dùng và nhúng đồ họa trong cửa sổ phụ.
Trong khi tôi sẽ đương nhiên muốn có một tốt đẹp, giải pháp đa nền tảng Qt-ish, tôi sẵn sàng xem xét phải dùng đến một hack đặc trưng cho Windows, quá. (Mà nên là có thể, như tôi có thể thấy Alt+PrtScr
làm rất nhiều điều đúng.)
Vì vậy, bất cứ đề nghị?
Nó * làm * việc! Tại sao tôi không thể tự mình nghĩ về điều này? ...Hạn chế duy nhất tôi thấy là điều này về cơ bản hơi chậm hơn khi so sánh với việc chỉ lấy cửa sổ quan tâm. Điều này có thể trở nên có liên quan, bởi vì tôi thực sự đang cố gắng lấy một video. Nhưng tôi vẫn chấp nhận câu trả lời, bởi vì nó chính xác những gì tôi yêu cầu - cảm ơn bạn rất nhiều! – Reunanen