Tôi có giao diện người dùng sau, nơi biểu đồ âm thanh (biểu diễn âm thanh thời gian + freq +) được hiển thị. Vì vậy, hình ảnh không được tải từ đâu đó, nó được vẽ bởi QPainter
trong khi đọc tệp WAV
.Làm cách nào để cuộn hình ảnh 1024x90000 hiệu quả trong cửa sổ?
thực hiện hiện tại của tôi là một đơn khổng lồ QImage
đối tượng, mà hình ảnh được rút ra. Và trên paintEvent()
, tôi vẽ một phần của lớn QImage
trên widget:
QPainter painter(this);
// (int, int, QImage*, int, int)
painter.drawImage(0, 0, *m_sonogram, 0, m_offset);
Nhưng, như tôi biết, các QPixmap
được tối ưu hóa để hiển thị pixmaps trên màn hình, vì vậy tôi nên chuyển đổi QImage
đến một QPixmap
sau bản vẽ của sonogram được thực hiện?
Ngoài ra, bạn nên giữ một hình ảnh lớn như một danh sách liên kết của các đối tượng có kích thước nhỏ hơn và làm cho paintEvent()
trở nên thông minh hơn để vận hành danh sách các vật nhỏ hơn để tránh các quy trình cắt tự động của Qt vv.
Khi QImage của tôi đủ lớn, mỗi paintEvent()
tiêu thụ rất nhiều CPU
.
Tất cả các loại lời khuyên được hoan nghênh :)
Có thể đăng nội dung nào đó về các máy bạn muốn chạy. Sử dụng danh sách liên kết có thể thông minh tùy thuộc vào các máy mục tiêu. – EKS
Có lẽ tôi sai, nhưng có vẻ như bạn vẽ toàn bộ hình ảnh mỗi sự kiện sơn. Bạn chỉ có thể vẽ một phần của hình ảnh bạn đang hiển thị trên khung nhìn. Đó là nên giữ cho CPU tiêu thụ liên tục. – Masci
@Masci: Xem ghi chú "Tự động Cắt" trong tài liệu QPaintEvent: Qt thực hiện điều này tự động và bạn không cần phải giải thích sao chép bất kỳ trạng thái cắt QPaintEvent nào vào QPainter của bạn. – timday