crossplatform.ru

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


  Ответ в Ошибка при использовании метода setPixel класса QImage
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
lanz Дата 27.3.2013, 14:33
  Вот это
px = 492 + i * math.cos(self.MyGradusToRadian(j/2))
py = 492 + i * math.sin(self.MyGradusToRadian(j/2))


Надо перенести внутрь цикла
for j in range(0, 720, 1):
     for i in range(491, -1, -1):
          im.setPixel(px, py, QtGui.QColor(bf[j][-i], bf[j][-i], bf[j][-i], 255).rgba())

Иначе px и py не обновляются и остаются одинаковыми на каждой итерации.
zuze Дата 27.3.2013, 13:44
  Почему вот так картинка выводится, когда я im вывожу

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

          px = 492 + i * math.cos(self.MyGradusToRadian(j/2))
          py = 492 + i * math.sin(self.MyGradusToRadian(j/2))

          im.setPixel(px, py, QtGui.QColor(bf[0], bf[0], bf[0], 255).rgba())


А вот так не выводится

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])

          px = 492 + i * math.cos(self.MyGradusToRadian(j/2))
          py = 492 + i * math.sin(self.MyGradusToRadian(j/2))

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


Как я понял во втором случае не правильно вычисляются px и py, но почему? Я ведь в одном случае картеж использую, а вдругом список.
zuze Дата 27.3.2013, 10:22
 
Цитата(lanz @ 27.3.2013, 10:12) *
Происходит загрузка 491 элемента из каждой строки (491...1) поэтому картинка при загрузке смещается.


Большое спасибо!
Переделал в обеих функциях

for i in range(491, 0, -1):


На, это

for i in range(491, -1, -1):


Всё заработало.
lanz Дата 27.3.2013, 10:12
  В функции f1

for i in range(491, 0, -1):


Происходит загрузка 491 элемента из каждой строки (491...1) поэтому картинка при загрузке смещается.
Надо начинать от 492.
zuze Дата 27.3.2013, 9:36
 
Цитата(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]
lanz Дата 27.3.2013, 9:29
  Добавьте в f2:
for j in range(0, 720, 1):
    print len(bf[j])


Что выводит?
zuze Дата 27.3.2013, 9:26
 
Цитата(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:18
  Добавьте после:
def f2():
    global bf


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


Посмотрите что будет выводить. Возможно bf очищается между вызовами f1 и f2.
zuze Дата 27.3.2013, 9:00
 
Цитата(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, 8:44
  Странно, этот код у меня работает нормально. Точно в этом куске ошибка?

Попробуйте закомментировать разные участки, в какой строчке ошибка?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.4.2024, 22:37