2012-04-25 2 views
0

Я пишу программу для курса колледжа. Я импортирую файл .PPM, сохраненный как 2-мерный массив из main в функцию. Затем я должен обновить пиксели графического окна (которое открывается в основном) с использованием методов и функций .setPixel и color_RGB().Графика Python пропускает каждый пиксель при рисовании файла .PPM из функции

пиксели обновляются, однако по какой-либо причине между каждым цветным пикселем есть белый пиксель. Это не файл PPM (они были предоставлены моим профессором, и я пробовал несколько), поэтому это должна быть моя функция.

Предупреждение: Мне не разрешено использовать что-либо в моей программе, которое мы еще не рассмотрели в нашем курсе (это первый год, 4-месячный курс, поэтому масштаб не массивный). Мне не нужно точно знать, КАК его исправить, насколько мне нужно знать, почему это делается (AKA: мне нужно объяснить, как я это исправил, и почему он ломался в первую очередь).

Вот моя функция:

def Draw_Pic(pic,pic_array, sizeX, sizeY, gfx_window): 

for y in range(sizeY): 

    for x in range(0, sizeX, 3): 

     pixel_color = color_rgb(pic_array[y][x],pic_array[y][x+1],pic_array[y][x+2]) 


     pic.setPixel(x,y,pixel_color) 
     gfx_window.update() 
+1

Подсказка: вы не можете использовать одну и ту же переменную x для индексации в массив RGB и в изображение, делая это, вы заканчиваете установку только 1 на 3 пикселя на изображении. – mjv

+0

Хорошо, так какой будет лучший маршрут, чтобы исправить это? Как я уже упоминал в другом комментарии, возможно, введя переменную-счетчик за пределы цикла, которая добавит 1 к месту x для каждой итерации? Хотя похоже, что это может завершиться неудачно, когда массив начнет возвращаться для каждой новой строки. – Pyrok

ответ

0

Вы используете range(0, sizeX, 3), который создает список со значениями от 0 до SizeX с приращением 3.

Так что ваш й идут 0..3..6 .. 9 и т. Д. Идеально подходит для той части, где вы собираете пиксельный цвет из трех компонентов, но затем вы делаете pic.setPixel(x,y,colors) с использованием того же чередующегося x.

Надеюсь, что помогло.

P.S. Кстати, почему «цвета», а не «цвет»?

Редактировать Кроме того, таким образом вы копируете только 1/3 изображения в pic_array.

+0

Я просто использовал цвета в качестве имени переменной, я переключил несколько имен переменных, когда я скопировал свою функцию в окно сообщения из-за того, что мой университет имел некоторые странные политики в отношении «плагиата». Один из моих друзей по соседству с друзьями был отстранен на год за плагиат, поэтому я подумал, что лучше не рисковать. Кроме того, любые предложения о том, как решить мою проблему, возможно, настраивая другую переменную счетчика за пределами цикла и добавьте ее только 1 на x во время каждой итерации? – Pyrok

+0

Моя точка - это «цвета», это сбивает с толку. Вы можете переименовать его в 'pixel_color' или что-то еще. – zrxq

+0

Итерации 0..width, затем используйте x * 3, x * 3 + 1, x * 3 + 2 для доступа к каждому компоненту. – zrxq