crossplatform.ru

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

6 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
> Ошибка при использовании метода setPixel класса QImage, Python
zuze
  опции профиля:
сообщение 22.3.2013, 9:09
Сообщение #1


Участник
**

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

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




Репутация:   0  


# Глобальная переменная
im3 = QtGui.QImage(985, 985, QtGui.QImage.Format_ARGB32)

# В функции
for j in range(0, 720, 1):
     bf.append([])
     for i in range(491, 0, -1):
          bf[j].append(fp.read(i+j))

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

          im3.setPixel(px, py, QtGui.QColor(bf[j], bf[j], bf[j], 255).rgba())


Ругаеться на строчку

im3.setPixel(px, py, QtGui.QColor(bf[j], bf[j], bf[j], 255).rgba())


Ошибка:
QColor(Qt.GlobalColor): argument 1 has unexpected type 'list'
QColor(int): argument 1 has unexpected type 'list'
QColor(QVariant): too many arguments
QColor(): too many arguments
QColor(int, int, int, int alpha=255): argument 1 has unexpected type 'list'
QColor(QString): argument 1 has unexpected type 'list'
QColor(QColor): argument 1 has unexpected type 'list'

Я пытался в интернете или в книгах найти примеры, но что-то не нашёл.
Подскажите пожалуйста, как поправить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 22.3.2013, 9:28
Сообщение #2


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

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

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




Репутация:   8  


Ой ой ой :lol:
bf[j].append(fp.read(i+j))

Вот это зачем? read читает число байт равное своему аргументу. i+j там совсем не к месту.

bf это же список списков, элементами bf являются списки и только их элементами значения
im3.setPixel(px, py, QtGui.QColor(bf[j][i], bf[j][i], bf[j][i], 255).rgba())
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 22.3.2013, 9:36
Сообщение #3


Участник
**

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

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




Репутация:   0  


Цитата(lanz @ 22.3.2013, 9:28) *
Вот это зачем? read читает число байт равное своему аргументу. i+j там совсем не к месту.


Так как мне надо поэлементно из файла занести данные в список. А потом эти значения занасить в метод setPixel поэлементно.

Сделал так:

im3.setPixel(px, py, QtGui.QColor(bf[j][i], bf[j][i], bf[j][i], 255).rgba())


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

Сообщение отредактировал zuze - 22.3.2013, 9:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 22.3.2013, 10:33
Сообщение #4


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

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

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




Репутация:   8  


Цитата
read читает число байт равное своему аргументу

Соответственно read(i+j) читает i+j байт.
Вряд ли это то что нужно.

EDIT:
Да, не работает, потому что i идет в обратном порядке 491 - 0.
Индекс вообще по хорошему не нужен:
for j in range(0, 720, 1):
     bf.append([])
     for i in range(491, 0, -1):
          color = fp.read(1)
          bf[j].append(color)

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

          im3.setPixel(px, py, QtGui.QColor(color, color, color, 255).rgba())


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


Участник
**

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

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




Репутация:   0  


Цитата(lanz @ 22.3.2013, 10:33) *
Да, не работает, потому что i идет в обратном порядке 491 - 0.


Сделал, как Вы написали, в результате выводитсмя ошибка:
TypeError: arguments did not match any overloaded call:
QColor(Qt.GlobalColor): argument 1 has unexpected type 'str'
QColor(int): argument 1 has unexpected type 'str'
QColor(QVariant): too many arguments
QColor(): too many arguments
QColor(int, int, int, int alpha=255): argument 1 has unexpected type 'str'
QColor(QString): too many arguments
QColor(QColor): argument 1 has unexpected type 'str'


Цитата(lanz @ 22.3.2013, 10:33) *
Индекс вообще по хорошему не нужен


Почему не нужен, ведь от "i" зависит следующий код

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


Может быть я не очень описал свою задачу (Я её опиушу на примере Си, так как там есть двухмерные массивы):
У меня есть глобальный двухмерный массив "int buffer[492][720]" и я в него должне занести данные по элементно из двоичного файла.

Сообщение отредактировал zuze - 22.3.2013, 11:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 22.3.2013, 11:39
Сообщение #6


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

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

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




Репутация:   8  


Надо преобразовать считываемое значение в целое:
color = int (fp.read(1))


Индекс не нужен в том смысле что не обязательно обращатся к массиву по индексу, мы ведь читаем цвет на этой же итерации.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 22.3.2013, 12:18
Сообщение #7


Участник
**

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

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




Репутация:   0  


Цитата(lanz @ 22.3.2013, 11:39) *
Надо преобразовать считываемое значение в целое:


Сделал как Вы сказали, но произошла ошибка: ValueError: invalid literal for int() with base 10: '\xed'
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 22.3.2013, 15:02
Сообщение #8


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

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

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




Репутация:   8  


А что за файл, что в нем содержится?

И в каком формате открыт файл, в текстовом или двоичном?

Сообщение отредактировал lanz - 22.3.2013, 15:03
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 22.3.2013, 15:09
Сообщение #9


Участник
**

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

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




Репутация:   0  


Цитата(lanz @ 22.3.2013, 15:02) *
А что за файл, что в нем содержится?

И в каком формате открыт файл, в текстовом или двоичном?


Файл двоичный, содержаться значения цвета, каждое значение это значения RGB, открыт в двоичном режиме.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 22.3.2013, 15:28
Сообщение #10


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

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

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




Репутация:   8  


Проще всего использовать модуль struct
http://docs.python.org/2/library/struct.html

Например
fp = open ("D:/Trash/1", "wb")
fp.write (struct.pack ("BBB", 10, 20, 30))
fp.close ()
fp = open ("D:/Trash/1", "rb")
struct.unpack ("BBB", fp.read (3))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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