crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

6 страниц V  « < 2 3 4 5 6 >  
Ответить в данную темуНачать новую тему
> Ошибка при использовании метода setPixel класса QImage, Python
zuze
  опции профиля:
сообщение 25.3.2013, 12:56
Сообщение #31


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 25.3.2013, 12:43) *
Какие левые результаты?


Ой сам виноват, ступил, тут только одно значение неправильное было, а именно i доходило до 1, а не до 0.
Переделал
for i in range(491, -1, -1):
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 26.3.2013, 10:17
Сообщение #32


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вот тут появилсась такая загвостка.

# Глобальная переменная
bf = []

# В функции 1
for j in range(0, 720, 1):
     for i in range(491, -1, -1):
          bf = struct.unpack("B", fp.read(1))

# В функции 2
for j in range(0, 720, 1):
     for i in range(491, -1, -1):
          im1.setPixel(j, i, QtGui.QColor(bf[0], bf[0], bf[0], 255).rgba())
          print bf[0]


В функции 1 всё впорядке, а вот в функции 2 bf[0] выводит постоянно 21 и это совершенно не верно.
Почему так происходит?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 26.3.2013, 10:31
Сообщение #33


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


bf обновляется только в первой функции.
Во второй функции используется последнее считанное в bf значение.

Зачем делать два одинаковых цикла в разных местах?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 26.3.2013, 10:34
Сообщение #34


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 26.3.2013, 10:31) *
Зачем делать два одинаковых цикла в разных местах?


У меня проблемы с торможениями программы и я ищу узкие места. Хотел bf использовать глобально в другой функции, но видемо это не возможно. Наверно в таких случаях надо список использовать?

Сообщение отредактировал zuze - 26.3.2013, 10:38
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 26.3.2013, 10:52
Сообщение #35


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Это возможно, только нужно добавлять в массив.

bf = []

def f1():
    global bf
    for ...
        bf.append ([])
        for ...            
            bf[i].append(struct.unpack("B", fp.read(1))[0])
def f2():
    global bf
    for ...
        for ...            
            im1.setPixel (j, i, QtGui.QColor(bf[i][j], bf[i][j], bf[i][j] ...


print выполняется очень долго. Его надо убрать из внутреннего цикла при замере производительности.

Сообщение отредактировал lanz - 26.3.2013, 10:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 26.3.2013, 11:06
Сообщение #36


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 26.3.2013, 10:52) *
print выполняется очень долго. Его надо убрать из внутреннего цикла при замере производительности.


Это сомо собой, это я для проверки того, что там ерунда выходит, а так я конечно уберу.

Я сделал так:

for j in range(0, 720, 1):
     bf.append([])
     for i in range(491, -1, -1):
          bf[i].append(struct.unpack("B", fp.read(1))[0])


Выскочила ошибка: IndexError: list index out of range
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 26.3.2013, 11:40
Сообщение #37


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


bf[i].append(struct.unpack("B", fp.read(1))[0])


Надо заменить i на j, поскольку мы добавляем в j-ый список.

Кстати тут надо согласовать индексы потому что список заполняется с начала, а используется с конца.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 26.3.2013, 12:52
Сообщение #38


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 26.3.2013, 11:40) *
Кстати тут надо согласовать индексы потому что список заполняется с начала, а используется с конца.


Я думал это надо сделать вот таким образом

bf = []

def f1():
    global bf
    for j in range(0, 720, 1):
         bf.append([])
         for i in range(491, 0, -1):
              bf[j].append(struct.unpack("B", fp.read(1))[0])
def f2():
    global bf
    for j in range(0, 720, 1):
         for i in range(491, -1, -1):
              im1.setPixel(j, i, QtGui.QColor(bf[-i][j], bf[-i][j], bf[-i][j], 255).rgba())


Я в функции 2 при задании i в bf указал минус, то есть bf[-i][j], вроде это тогда с конца спаиска. Но это не помогло.
Ошибка: IndexError: list index out of range
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 26.3.2013, 13:09
Сообщение #39


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Ну да, заполняем 491 элемент:
for i in range(491, 0, -1):

А считываем 492:
for i in range(491, -1, -1):


Кроме того последний элемент будет -1 а не -0, а первый -492, поэтому в установке пикселей надо:
for i in range(492, 0, -1):
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 26.3.2013, 13:22
Сообщение #40


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я сделал так:

bf = []

def f1():
    global bf
    for j in range(0, 720, 1):
         bf.append([])
         for i in range(491, 0, -1):
              bf[j].append(struct.unpack("B", fp.read(1))[0])
def f2():
    global bf
    for j in range(0, 720, 1):
         for i in range(491, 0, -1):
              im1.setPixel(j, i, QtGui.QColor(bf[-i][j], bf[-i][j], bf[-i][j], 255).rgba())


Ошибка: IndexError: list index out of range

Сообщение отредактировал zuze - 26.3.2013, 13:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

6 страниц V  « < 2 3 4 5 6 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


15 чел. читают эту тему (гостей: 15, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 18:28