reclosedev
Покажите код загрузки и отображения картинок.
Вот код:
# -*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui, uic import math import os import struct bf = [] dir = os.path.join(os.getcwd(), "file") phi = 0.0 im = QtGui.QImage(720, 492, QtGui.QImage.Format_ARGB32) class ld(QtGui.QDialog): def __init__(self, parent=None): super(ld, self).__init__(parent) self.ui = uic.loadUi("ld.ui", self) self.connect(self.ui.radioButton_2, QtCore.SIGNAL("clicked()"), self.MyClickRect) self.timer = QtCore.QTimer() self.connect(self.timer, QtCore.SIGNAL("timeout()"), self.MyTimer) self.timer.setInterval(5000) self.timer.start() def paintEvent(self, QPaintEvent): if self.ui.radioButton_2.isChecked(): painterRect = QtGui.QPainter(self) painterRect.setBrush(QtGui.QColor('black')) painterRect.drawRect(50, 50, 720, 492) self.MyDraw() def MyClickRect(self): self.update() def MyRadianToGradus(self, phiedit): gradus = phiedit * 360/(2*math.pi) return gradus def MyGradusToRadian(self, phiedit): radian = phiedit * 2*math.pi / (360) return radian def MyTimer(self): global dir global phi global bf global im if self.ui.checkBox_4.isChecked(): os.chdir(dir) try: fp = open('1.dat', 'rb') except IOError: print "Cannot open file read!" fp.seek(0, 2) size = fp.tell() fp.seek(size - (492*720), 0) for j in range(0, 720, 1): bf.append([]) for i in range(491, -1, -1): bf[j].append(struct.unpack("B", fp.read(1))[0]) for j in range(0, 720, 1): for i in range(491, -1, -1): im.setPixel(j, i, QtGui.QColor(bf[j][-i], bf[j][-i], bf[j][-i], 255).rgba()) self.update() if self.ui.radioButton_2.isChecked(): if int((self.MyRadianToGradus(phi)+0.5)*720)/360 < 720: phi += self.MyGradusToRadian(6.0) else: phi = self.MyGradusToRadian(6.0) def MyDraw(self): global im global bf Tochka = QtGui.QPainter() Tochka.begin(self) Tochka.translate(50, 50) Tochka.drawImage(0, 0, im, 0, 0, int((2*self.MyRadianToGradus(phi))+0.5), 492) Tochka.end() self.update() if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = ld() window.show() sys.exit(app.exec_())
Время выполнения рисования картинки не соответствует таймеру, как я понял это из-за кода:
for j in range(0, 720, 1): bf.append([]) for i in range(491, -1, -1): bf[j].append(struct.unpack("B", fp.read(1))[0]) for j in range(0, 720, 1): for i in range(491, -1, -1): im.setPixel(j, i, QtGui.QColor(bf[j][-i], bf[j][-i], bf[j][-i], 255).rgba())
Пыталя уменьшить циклы, смог уменьшить, только на два цикла.
for j in range(0, 720, 1): for i in range(491, -1, -1): bf = struct.unpack("B", fp.read(1)) im.setPixel(j, i, QtGui.QColor(bf[0], bf[0], bf[0], 255).rgba())
Всё равно тормоза. Как я понял надо полностью избавится от циклов.
Но как это сделать?
А может ещё какие возможности есть?