Chcę zrobić coś takiego:

...
pixel[0,0] = [ 254, 0, 0 ] # Draw R at pixel x0y0
pixel[2,1] = [ 0, 254, 0 ] # Draw G at pixel x2y1
pixel[4,2] = [ 0, 0, 254 ] # Draw B at pixel x4y2
...

Mam nadzieję wyświetlić wiele różnych konfiguracji pikseli i kolorów w krótkim czasie - pisanie do pliku pośrednich byłoby zbyt drogie.

Jak powinienem uzyskać osiągnięcie tego celu w Pythonie?

15
Matthieu Cartier 28 wrzesień 2011, 19:15

4 odpowiedzi

Najlepsza odpowiedź

bezpośrednia odpowiedź:

Można to zrobić tylko za pomocą API specyficznej dla OS. Niektóre systemy operacyjne nie pozwalają bezpośrednio zmienić piksele na ekranie.

W systemie Windows można użyć Pywin32 biblioteki, aby uzyskać kontekst urządzenia Ekran z dc = GetDC(0) malować piksele z SetPixel(dc, x, y, color).

import win32gui
import win32api

dc = win32gui.GetDC(0)
red = win32api.RGB(255, 0, 0)
win32gui.SetPixel(dc, 0, 0, red)  # draw red at 0,0

Oczywiście, co malujesz w ten sposób, może być wymazany w dowolnym momencie.

prawa odpowiedź:

Malowanie pikseli przez piksel jest najwolniejszym sposobem na malowanie czegoś. Na przykład, w systemie Windows, tworzenie obrazu w pamięci, a następnie malowanie go w jednej operacji jest kolejność wielkości szybciej niż malowanie z setpixel.

Jeśli potrzebujesz szybkości, użyj niektórych biblioteki interfejsu użytkownika dla Pythona, na przykład, modułu TKININ lub PYQT. Utwórz okno i obraz w pamięci, a następnie pomaluj obraz w oknie. Jeśli potrzebujesz manipulowania pikselami, manipuluj je na obrazie i przemalować za każdym razem.

23
Ray Salem 29 styczeń 2019, 20:48

Polecam bibliotekę Pygame. Jest to biblioteka między platformą dobrze nadaje się do ogólnej grafiki komputerowej i rozwoju gry. Sprawdź tutaj kilka przykładów PYGAME w akcji.

Biblioteka jest dość prosta, ale potężna. Możesz także rysować w oknie, a także na pełnym ekranie.

1
Leonel Machava 28 wrzesień 2011, 20:58

Nie jestem pewien, czy zdobędę twoje pytanie, ale wierzę, że powinieneś zbadać niektóre ramy lub oprogramowanie pośrednie, które zapewniają dostęp do ekranu. Powiedziałbym Pygame lub Pyglet, a może nawet Panda. Może być trochę przesadny, ponieważ Pygame i Panda są ramami, które pozwalają Ci rozwijać grę, podczas gdy Pyglet jest opakowany do OpenGL w Pythonie, ale pozwoli Ci kontrolować piksele, okna i podobne.

3
Drachenfels 28 wrzesień 2011, 15:20

Chociaż nie jest to dokładnie to, co mówisz (farba "Pixel"), lubię używać Pythona, GTK i Kairu.

W takim przypadku tworzysz okno GTK, dodaj drawingarea, utwórz kontekst Kairu i wykonaj operacje farb.

Różnica polega na tym, że masz ciągłe płótno współrzędne, a zamiast pikseli rysować geometryczne kształty z uderzeniami i wypełnieniami. Można nawet narysować prostokąty jednopikselowe i wypełnić je, ale to nie byłoby tak szybko.

Ponadto możesz wziąć dowolnego obiektu rastrowego (obraz, Pixbuffer) i renderować go raz. Następnie możesz wygenerować obrazy w szybkiej sekwencji i renderować swoje piksele na raz, podobnie jak film.

Przykład roboczy można zobaczyć w poprzedniej odpowiedzi tutaj (drugi fragment): Najszybszy sposób na rozpoczęcie pracy z Kair

3
Community 23 maj 2017, 11:59