2012-02-25 31 views
9

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ổ?

The UI

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 :)

+0

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

+3

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

+0

@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

Trả lời

1

Vâng, trong kinh nghiệm hạn chế của tôi về phát triển ứng dụng Qt, nếu bạn có một hình ảnh tĩnh (hoặc một hình ảnh được cập nhật thường xuyên) nó cũng có giá trị (đối với mục đích hoạt động) tạo ra một QPixmap từ nó và giữ nó xung quanh để sử dụng thông qua QPainter::drawPixmap trong xử lý paintEvent của bạn. Tuy nhiên, tôi chưa bao giờ thử làm điều này với bất cứ thứ gì lớn hơn hình ảnh 4Kx4K, cho dù nó có hoạt động với hình ảnh to lớn của bạn hay rơi khủng khiếp khi bạn bắt đầu nhấn mạnh bộ nhớ đồ họa của mình. Tôi chắc chắn sẽ thử nó trước khi xem xét việc thêm một hệ thống ốp lát phức tạp.

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