Wie kann ich in Python direkt auf ein Pixel auf dem Bildschirm zeichnen?

8

Ich möchte etwas wie das folgende machen:

%Vor%

Ich hoffe, in kurzer Zeit viele verschiedene Konfigurationen von Pixeln und Farben anzeigen zu können - das Schreiben in eine Zwischendatei wäre zu teuer.

Wie sollte ich dieses Ziel in Python am besten erreichen?

    
Matthieu Cartier 28.09.2011, 15:15
quelle

4 Antworten

16

Direkte Antwort:

Dies kann nur mit Betriebssystem-spezifischen APIs durchgeführt werden. In einigen Betriebssystemen können Pixel nicht direkt auf dem Bildschirm geändert werden.

Unter Windows können Sie pywin32-Bibliotheken verwenden, um den Gerätekontext des Bildschirms mit dc = GetDC(0) call abzurufen, und dann Pixel mit SetPixel(dc, x, y, color) malen. Natürlich kann das, was Sie auf diese Weise malen, jederzeit gelöscht werden.

Richtige Antwort:

Malen pixelweise ist die langsamste Art, etwas zu malen. Unter Windows beispielsweise ist das Erstellen eines Bildes im Speicher und das anschließende Malen in einem Vorgang um Größenordnungen schneller als das Zeichnen mit SetPixel.

Wenn Sie Geschwindigkeit benötigen, verwenden Sie eine Benutzerschnittstellenbibliothek für Python, z. B. Tkinter-Modul oder PyQt. Erstellen Sie ein Fenster und ein Bild im Speicher und malen Sie dann das Bild im Fenster. Wenn Sie Pixel manipulieren müssen, manipulieren Sie sie im Bild und streichen Sie jedes Mal neu.

    
hamstergene 28.09.2011, 15:32
quelle
3

Ich bin mir nicht sicher, ob ich Ihre Frage richtig beantworte, aber ich glaube, Sie sollten ein Framework oder eine Middleware untersuchen, die Ihnen den Zugriff auf den Bildschirm ermöglichen. Ich würde PyGame oder Pyglet oder vielleicht sogar Panda sagen. Es könnte ein bisschen zu viel werden, denn Pygame und Panda sind ein Framework, mit dem Sie Spiele entwickeln können, während Pyglet in Python mit OpenGL versehen ist, aber Sie können damit Pixel, Fenster und Ähnliches einfach steuern.

    
Drachenfels 28.09.2011 15:20
quelle
2

Obwohl es nicht genau das ist, was Sie sagen (malen Sie "pixelweise"), verwende ich gerne Python, GTK und Cairo.

In diesem Fall erstellen Sie ein GTK-Fenster, fügen ein DrawingArea-Objekt hinzu, erstellen einen Cairo-Kontext und malen Operationen.

Der Unterschied besteht darin, dass Sie über eine fortlaufende Arbeitsfläche mit Fließkomma-Koordinaten verfügen und anstelle von Pixeln geometrische Formen mit Konturen und Füllungen zeichnen. Sie könnten sogar Rechtecke mit einer Größe von einem Pixel zeichnen und diese füllen, aber das wäre nicht so schnell.

Sie können auch ein beliebiges Raster-Objekt (Bild, Pixpuffer) aufnehmen und gleichzeitig rendern. Dann könnten Sie Bilder in einer schnellen Sequenz erzeugen und ihre Pixel auf einmal rendern, ähnlich wie bei einem Film.

Ein Arbeitsbeispiel kann hier in einer früheren Antwort (zweites Snippet) gesehen werden: schnellste Möglichkeit, um mit Kairo zu beginnen

    
heltonbiker 28.09.2011 15:25
quelle
1

Ich empfehle dir die Pygame-Bibliothek. Es ist eine plattformübergreifende Bibliothek, die sich gut für allgemeine Computergrafik und Spieleentwicklung eignet. Hier finden Sie einige Beispiele für Pygame in Aktion.

Die Bibliothek ist ziemlich einfach, aber leistungsstark. Sie können in einem Fenster und auch im Vollbildmodus zeichnen.

    
Leonel Machava 28.09.2011 20:58
quelle

Tags und Links