crossplatform.ru

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

6 страниц V  « < 3 4 5 6 >  
Ответить в данную темуНачать новую тему
> Ошибка при использовании метода setPixel класса QImage, Python
lanz
  опции профиля:
сообщение 26.3.2013, 13:40
Сообщение #41


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

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

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




Репутация:   8  


Конечно, мы добавляем 720 списков:
for j in range(0, 720, 1):
     bf.append([])

Потом в каждый из списков по 492 элемента:
for i in range(491, 0, -1):
     bf[j].append(struct.unpack("B", fp.read(1))[0])


А тут получается мы прогоняем 492 списка[-i] по 720 элементов[j]
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())

Должно быть наоборот.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 26.3.2013, 13:53
Сообщение #42


Участник
**

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

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




Репутация:   0  


Цитата(lanz @ 26.3.2013, 13:40) *
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())


Должно быть наоборот.


Прошу прощения, я не очень понял.
Сделал так:

for i in range(0, 720, 1):
     for j in range(491, 0, -1):
          im1.setPixel(j, i, QtGui.QColor(bf[-i][j], bf[-i][j], bf[-i][j], 255).rgba())


Но это не помогло, значит я не совсем правильно понял Вас.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 26.3.2013, 14:12
Сообщение #43


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

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

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




Репутация:   8  


Вот так:
for j in range(0, 720, 1):
     for i in range(492, 0, -1):
          im1.setPixel(j, i, QtGui.QColor(bf[j][-i], bf[j][-i], bf[j][-i], 255).rgba())
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 27.3.2013, 8:26
Сообщение #44


Участник
**

Группа: Участник
Сообщений: 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[j][-i], bf[j][-i], bf[j][-i], 255).rgba())


Но это не помогло. Ошибка: IndexError: list index out of range

Сообщение отредактировал zuze - 27.3.2013, 8:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 27.3.2013, 8:44
Сообщение #45


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

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

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




Репутация:   8  


Странно, этот код у меня работает нормально. Точно в этом куске ошибка?

Попробуйте закомментировать разные участки, в какой строчке ошибка?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 27.3.2013, 9:00
Сообщение #46


Участник
**

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

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




Репутация:   0  


Цитата(lanz @ 27.3.2013, 8:44) *
в какой строчке ошибка?


Ошибка в строчке:

im1.setPixel(j, i, QtGui.QColor(bf[j][-i], bf[j][-i], bf[j][-i], 255).rgba())
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 27.3.2013, 9:18
Сообщение #47


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

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

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




Репутация:   8  


Добавьте после:
def f2():
    global bf


Распечатку длины списка:
print len(bf)


Посмотрите что будет выводить. Возможно bf очищается между вызовами f1 и f2.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 27.3.2013, 9:26
Сообщение #48


Участник
**

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

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




Репутация:   0  


Цитата(lanz @ 27.3.2013, 9:18) *
Добавьте после:

def f2():
    global bf


Конечно это добавлено.


Цитата(lanz @ 27.3.2013, 9:18) *
Распечатку длины списка:

print len(bf)


Как я понял это надо сделать в функции 2

def f2():
    print len(bf)


Выводится: 720.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 27.3.2013, 9:29
Сообщение #49


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

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

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




Репутация:   8  


Добавьте в f2:
for j in range(0, 720, 1):
    print len(bf[j])


Что выводит?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 27.3.2013, 9:36
Сообщение #50


Участник
**

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

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




Репутация:   0  


Цитата(lanz @ 27.3.2013, 9:29) *
Что выводит?


Ошибку нашёл, я в функции 2 переставил случайно i и j в циклах. Картинка выводиться. Но увы она выводитя не правидьно. Рисуется под ноклоном и копирует сому себя, то есть на экране две одинаковых картинки.
А картинка должна рисоватся так:
bf[491][0].....bf[491][720]
bf[490][0].....bf[490][720]
...
bf[0][0]........bf[0][720]

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

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


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




RSS Текстовая версия Сейчас: 26.11.2024, 1:05