Как можно сделать масштабирование QPixmap более эффективным?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как можно сделать масштабирование QPixmap более эффективным?

Сообщение Anonymous »

Я пытался отобразить созданные в реальном времени изображения QPixmap внутри QLabel со скоростью 24 кадра в секунду. Это прекрасно работает, когда я использую размер изображения по умолчанию, но когда я пытаюсь масштабировать изображение, это занимает слишком много времени. Масштабирование изображения занимает в среднем 130-160 мс, тогда как мне нужно примерно в 4-5 раз быстрее.
from __future__ import division

from PyQt4.QtGui import QApplication, QMainWindow, QLabel, QPixmap
from PyQt4.QtCore import Qt

Class Main(QMainWindow):
def __init__(self, window_id):
super(Main, self).__init__()
self.window_id = window_id
self.image = QLabel()
self.setCentralWidget(self.image)

def start(self, window_id, fps=24):
self.timer = QTimer()
self.timer.setInterval(1000 / fps)
self.timer.timeout.connect(self.take_screenshot)
self.timer.start()

def take_screenshot(self):
screenshot = QPixmap.grabWindow(self.window_id)
#Scaling takes between 130-160 ms per pixmap
#Needs to be 4-5 times faster to keep up with 24fps
screenshot = screenshot.scaledToWidth(self.image.size().width(), Qt.SmoothTransformation)
self.image.setPixmap(screenshot)

if __name__ == "__main__":
app = QApplication([])
main = Main(app.desktop().winId())
main.start()
main.show()
app.exec_()

У меня есть некоторые ограничения. Примечательно, что мне приходится использовать PyQt4 и Python 2.6 с несколькими невстроенными модулями.
Я пробовал следующее, и ни один из них не оказался достаточно быстрым:
методы QPixmap.scaled*,Метод QPixmap.transformed,
Рисую растровое изображение на этикетке самостоятельно с помощью масштабированного QRect,
Метод QLabel.setScaledContents,
QtOpenGl — не те драйверы
Есть ли у меня какие-либо другие варианты ускорения масштабирования изображений?
Я использовал следующий подкласс QLabel, чтобы попытаться нарисовать QPixmap в масштабированный прямоугольник. >
class Image(QLabel):
def __init__(self):
super(Image, self).__init__()
self.pixmap None

def setPixmap(self, pixmap):
self.pixmap = pixmap
self.update

def paintEvent(self, event):
painter = QPainter(self)
if self.pixmap is not None:
rect = QRect(QPoint(0,0), self.pixmap.size())
painter.drawPixmap(event.rect(), self.pixmap, rect)
painter.end()


Подробнее здесь: https://stackoverflow.com/questions/787 ... -efficient
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как преобразовать CGImageRef в QPixmap в Qt 6?
    Гость » » в форуме C++
    0 Ответы
    12 Просмотры
    Последнее сообщение Гость
  • В чем разница между QImage и QPixmap?
    Anonymous » » в форуме C++
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Как замариновать объект QPixmap в Python 3
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Поврежденное отображение QPixmap.fromImage
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Проблема с QPixmap в библиотеке Qt для С++
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»