crossplatform.ru

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

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


Участник
**

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

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




Репутация:   0  


Я сделал так:

print struct.unpack("B", fp.read(1))


Выводиться почему-то так:

)
(37,)
(48,)
(45,)
(54,)
(40,)
(44,)
(56,)
...
...
...


А почему вот так не выводится?

37
48
45
54
40
44
56
...
...
...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 25.3.2013, 8:33
Сообщение #12


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

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

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




Репутация:   8  


http://docs.python.org/2/library/struct.html
Цитата
struct.unpack(fmt, string)

Unpack the string (presumably packed by pack(fmt, ...)) according to the given format. The result is a tuple even if it contains exactly one item. The string must contain exactly the amount of data required by the format (len(string) must equal calcsize(fmt)).


unpack всегда возвращает tuple ( http://docs.python.org/2/library/stdtypes.html#typesseq ).
В кратце - это немодифицируемый массив.
Чтобы получить первый элемент нужно обратится к нему как к списку:
color = struct.unpack("B", fp.read(1))
print color[0]


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


Участник
**

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

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




Репутация:   0  


Цитата(lanz @ 25.3.2013, 8:33) *
Чтобы получить первый элемент нужно обратится к нему как к списку:


Я сделал так как Вы сказали всё стало грамотно выводиться на экран. Появилась ещё одна проблемка.
Я сделал так:

bf = struct.unpack("B", fp.read(1))
im3.setPixel(px, py, QtGui.QColor(bf[j], bf[j], bf[j], 255).rgba())


Ругается на вторую строчку кода, ошибка: IndexError: tuple index out of range
Почему так? Может надо bf[j] в int перевести?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 25.3.2013, 8:56
Сообщение #14


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

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

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




Репутация:   8  


Цитата
IndexError: tuple index out of range

Значит что в tuple нет такого элемента.

"B" означает, что считывается один беззнаковый байт и на выходе получаем tuple с одним элементом, поэтому мы не можем использовать j как индекс.
bf = struct.unpack("B", fp.read(1))
im3.setPixel(px, py, QtGui.QColor(bf[0], bf[0], bf[0], 255).rgba())
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 25.3.2013, 9:00
Сообщение #15


Участник
**

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

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




Репутация:   0  


Цитата(lanz @ 25.3.2013, 8:56) *
"B" означает, что считывается один беззнаковый байт и на выходе получаем tuple с одним элементом, поэтому мы не можем использовать j как индекс.


А какже тогда быть? Мне надо чтобы через промежуток времения значения менялись, сначало 0 индех, потом 1 индех, затем 2 индех и так далее.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 25.3.2013, 9:20
Сообщение #16


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

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

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




Репутация:   8  


Да, но считывается на каждой итерации только один элемент.

fp.read(1)

Считывает каждый раз следующий элемент из файла.
А j влияет на px и py.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 25.3.2013, 9:40
Сообщение #17


Участник
**

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

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




Репутация:   0  


Цитата(lanz @ 25.3.2013, 9:20) *
А j влияет на px и py.


Да влияет

 px = 492 + i * math.cos(self.MyGradusToRadian(j/2))
py = 492 + i * math.sin(self.MyGradusToRadian(j/2))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 25.3.2013, 9:45
Сообщение #18


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

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

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




Репутация:   8  


И зачем он тогда в bf[j]?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 25.3.2013, 9:52
Сообщение #19


Участник
**

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

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




Репутация:   0  


Цитата(lanz @ 25.3.2013, 9:45) *
И зачем он тогда в bf[j]?


Вот код:

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


px, py - смещение
bf[j] - это RGB, на одной итерации R, G и B имеют одно значение, то есть R = bf[0], G = bf[0] и B = bf[0]. На следующей итерации R = bf[1], G = bf[1] и B = bf[1] и так далее.

Оптимальный вариант был бы двухмерный массив, но ссылку которую Вы дали на описание двухмерного массива выводит на главный сайт.

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


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

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

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




Репутация:   8  


Нет.

bf = struct.unpack("B", fp.read(1))


На каждой итерации bf содержит (только одно) значение, загруженное из файла на этой итерации.

Цитата(zuze @ 25.3.2013, 10:52) *
Оптимальный вариант был бы двухмерный массив, но ссылку которую Вы дали на описание двухмерного массива выводит на главный сайт.

Вовсе нет, зачем нам хранить данные о цвете в двух местах (массиве и картинке)?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 23.11.2024, 4:21