5 Stimmen

Array-Zuweisung vom Typ SWIG C++ aus Python

Ich schreibe ein Python-Skript für ein Programm, das seine C++-API mithilfe von SWIG offengelegt hat. Eine von SWIG exponierte Funktion hat eine Schnittstelle wie diese:

void writePixelsRect(JoxColor* colors, int left, int top, int width, int height);

JoxColor ist eine POD-Struktur, die wie folgt aussieht:

struct JoxColor {
    float r, g, b, a;
};

Ich kann einfach eine einzelne JoxColor in Python erstellen und einen Aufruf von writePixelsRect wie folgt aufrufen:

c = JoxApi.JoxColor()
c.r = r
c.g = g
c.b = b
c.a = a
JoxApi.writePixelsRect(c, x, y, 1, 1)

Der wiederholte Aufruf von writePixelsRect mit einem 1x1-Pixel-Rechteck ist sehr langsam, so dass ich ein Array von JoxColor aus Python erstellen möchte, so dass ich größere Rechtecke zur gleichen Zeit schreiben kann. Ist dies mit SWIG-Typen möglich?

Beachten Sie, dass ich keinen Zugriff auf den Quellcode der C++-Bibliothek habe, die JoxColor und writePixelsRect zur Verfügung stellt, so dass ich keine Hilfsfunktion für diese Funktion hinzufügen kann. Ich möchte auch keinen neuen C++-Code in das System einführen, da dies die Benutzer meines Python-Skripts zwingen würde, den C++-Code auf der jeweiligen Plattform zu kompilieren, auf der sie arbeiten. Ich habe Zugriff auf ctypes in der Python-Umgebung. Wenn ich also ein in ctypes erstelltes Float-Array irgendwie auf den Typ von JoxColor* für SWIG typisieren könnte, würde es für mich funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X