Mithilfe von python-ctypes um Puffer von Schwimmern aus der gemeinsamen Bibliothek in python string

Ich versuche, python-ctypes zu verwenden, diese zwei C-Funktionen aus einer gemeinsam genutzten Bibliothek:

bool decompress_rgb(unsigned char *data, long dataLen, int scale)
float* getRgbBuffer()

Die erste Funktion ist in Ordnung. Ich kann sagen, durch die Umsetzung von einigen debug-code in der gemeinsam genutzten Bibliothek und der überprüfung der Eingabe.

Das problem ist die Daten aus. Der RGB-buffer ist ein Zeiger auf ein float (klar) und dieser Zeiger bleibt konstant während der Lebensdauer der Anwendung. Daher, Wann immer ich will zum entpacken ein Bild, ich nenne decompress_rgb und müssen dann sehen, was auf die Lage spitzt sich zu, indem getRgbBuffer. Ich weiß, dass die Puffer-Größe (720 * 288 * sizeof(float)) also, ich denke, dies hat ins Spiel kommen, irgendwo.

Gibt es keine c_float_p geben, so dass ich dachte, ich würde versuchen Sie dies:

getRgbBuffer.restype = c_char_p

Dann weiß ich:

ptr = getRgbBuffer()
print "ptr is ", ptr

welche nur Ausgänge:

ptr = 3078746120

Ich vermute, dass ist die tatsächliche Adresse und nicht der Inhalt, aber selbst wenn ich erfolgreich dereferenzieren Sie den Zeiger und die Inhalte, es würde nur den ersten char.

Wie bekomme ich den Inhalt des gesamten Puffer in einem python-string?

Edit: ändern Musste:

getRgbBuffer.restype = c_char_p

zu

getRgbBuffer.restype = c_void_p

aber dann BastardSaint Antwort gearbeitet.

InformationsquelleAutor chrism1 | 2009-04-01
Schreibe einen Kommentar