У меня есть следующий пользовательский интерфейс, где показана сонограмма (частота звука + представление звука). Таким образом, изображение не загружается откуда-то, оно нарисовано QPainter
при чтении файла WAV
.Как эффективно прокрутить изображение 1024x90000 в окне?
Моя текущая реализация является одной огромной QImage
объект, где рисуется изображение. А на paintEvent()
, я рисую часть большого QImage
на виджете:
QPainter painter(this);
// (int, int, QImage*, int, int)
painter.drawImage(0, 0, *m_sonogram, 0, m_offset);
Но, как я знаю, то QPixmap
оптимизирован для отображения растров на экране, так что я должен преобразовать QImage
к QPixmap
после рисунок сонограммы сделан?
Кроме того, стоит держать большое изображение как своего рода связанного списка отдельных QPixmap
объектов меньшего размера и сделать paintEvent()
умнее работать в списке более мелких объектов, чтобы избежать автоматических резательных процедур Qt и так далее?
Когда мой QImage достаточно велик, каждый paintEvent()
, потребляющий много CPU
.
Все виды советы приветствуются :)
Возможно, что-нибудь о машинах, на которых вы хотите, чтобы это продолжалось. Использование связанного списка может быть умным в зависимости от целевых компьютеров. – EKS
Возможно, я ошибаюсь, но, кажется, вы рисуете весь образ каждого события рисования. Вы можете нарисовать только часть изображения, которое вы сейчас показываете в окне просмотра. Это должно постоянно поддерживать процессор. – Masci
@Masci: Обратите внимание на примечание «Автоматическое обрезание» в документах QPaintEvent: Qt делает это автоматически, и вам не нужно явно заполнять какое-либо условие отсечения QPaintEvent на ваш QPainter. – timday