2013-06-01 2 views
1

Моя конечная цель - найти цвет на изображении (в данном случае белый) и заменить его другим цветом (на основе определенных обстоятельств). Таким образом, при изменении определенной переменной белый заменяется определенным цветом.Python (pygame): Получить информацию о цветовой гамме?

Однако, чтобы попасть туда, я сейчас играю с изображениями (используя учебники ..etc). Я пытаюсь использовать приведенный ниже код для печати цветовой палитры изображения. Я понимаю, что цвета являются «кортежем» из 3 целых чисел, представляющих RGB. 0 = самый темный, 255 = белый. Итак, изображение, которое я тестирую, представляет собой черно-белое изображение. Я ожидаю нечто вроде «(0,0,0), (255,255,255)». Итак, я решил, могу ли я зайти так далеко, тогда я мог бы написать код, чтобы заменить «(255,255,255)» на соответствующий цвет.

Я упомянул конечную цель, потому что я прекрасно понимаю, что мой подход может быть не лучшим, и, возможно, у кого-то есть лучший способ, которым я могу это сделать. Если нет, я бы хотел, по крайней мере, иметь возможность печатать строку, ссылающуюся на цвета, которые содержит изображение. «NOFRAME» был отличным советом, который я нашел на этом сайте, так как я фактически не «использую» изображения/графику - просто используя их атрибуты.

image1=r"C:\Python27\Lib\site-packages\pygame\examples\data\image1.jpg" 
image2=r"C:\Python27\Lib\site-packages\pygame\examples\data\image2.png" 

import pygame, sys 
from pygame.locals import * 

pygame.init() 

pygame.display.set_mode((1,1), pygame.NOFRAME) 

background = pygame.image.load(image1).convert() 
mouse_c=pygame.image.load(image2).convert_alpha() 

colorpal = pygame.Surface.get_palette(mouse_c) 

print colorpal 
+0

Было бы хорошим объяснением, если бы вы только сказали, что не так, или задали конкретный вопрос. «Пожалуйста, проверьте мою программу и сделайте ее работу», это не очень хороший вопрос. – stark

+0

@stark: Я не согласен - там есть вопрос - вопрос, превышающий информацию, но он показывает, что пытается сделать O.P. - что касается хороших практик здесь. Мне жаль, что я должен уйти сейчас и не могу ответить на этот вопрос. – jsbueno

+0

Извините, если я не понял. Я не хотел задавать вопрос и не предоставлять достаточную информацию, поскольку я видел это слишком часто. Мой подход был просто: 1. Вот моя проблема, 2. Вот один из способов, которым я пытаюсь ее решить (у которого есть свои проблемы). 3. Может ли кто-нибудь помочь с любой проблемой? – user2438377

ответ

3

Что вы хотите сделать, так это потребовать много работы на уровне пикселей, поэтому я рекомендую вам использовать объект pygame.PixelArray для прямого доступа к пикселям поверхности.

Для чего вы специально хотите сделать это, похоже, вы можете использовать метод pygame.PixelArray.replace().

2

Вы можете получить отдельные пиксели на поверхности изображения, используя get_at метод Pygame поверхностей - как в mouse_c.get_at((0,0)).

Это строго то, о чем вы просите, но это не устраивает никаких реальных потребностей в мире, так как это чрезвычайно, и я говорю крайне медленно, обрабатывая все пиксели изображения, вызывающего именно это.

Вы можете взять буфер изображения с помощью get_buffer и интерпретировать данные там, raw или передать буфер вдоль функции, написанной в собственном коде, чтобы получить некоторую скорость.

Тем не менее, если ваша цель - заменить цвет другим в режиме реального времени, вы можете прибегнуть к использованию индексированных изображений - таким образом, на каждом изображении будет таблица цветов, вы просто измените, скажем, номер цвета 10, чтобы быть 0,0,255, и при визуализации изображения все вхождения этого цвета станут синими. Это быстро - не так эффективно, как в 8-битное время видеоигр, когда это было сделано с помощью аппаратного обеспечения, - но оно будет на порядок быстрее любых замещений, которые вы пытаетесь сделать в чистом коде Python.

+0

Спасибо jsbueno! Да пиксель за пикселем теперь забавный (и, вероятно, медленный). Но я буду помнить об этом в будущем. Я думаю, что pixelarray.replace лучше подходит для этого. – user2438377

Смежные вопросы