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.