Ich versuche eine Videoanwendung in PyQt4 zu schreiben und ich habe Python Ctypes verwendet, um in eine alte Legacy Video Decoder Bibliothek einzubinden. Die Bibliothek gibt mir 32-Bit-ARGB-Daten und ich muss daraus ein QImage machen. Ich habe es funktioniert wie folgt:Ctypes Daten so schnell wie möglich in Python String konvertieren
# Copy the rgb image data from the pointer into the buffer
memmove(self.rgb_buffer, self.rgb_buffer_ptr, self.buffer_size)
# Copy the buffer to a python string
imgdata = ""
for a in self.rgb_buffer:
imgdata = imgdata + a
# Create a QImage from the string data
img = QImage(imgdata, 720, 288, QImage.Format_ARGB32)
Das Problem ist, dass ctypes die Daten als Typ gibt „ctypes.c_char_Array_829440
“ und ich brauche es in einen Python-String zu drehen, so dass ich ein QImage konstruieren kann. Mein Kopiermechanismus benötigt derzeit fast 300 ms pro Bild, also ist es schmerzhaft langsam. Der Decodier- und Anzeigeteil des Prozesses dauert nur ungefähr 50 ms.
Kann mir jemand irgendwelche schlauen Abkürzungen vorstellen, die ich machen kann, um diesen Prozess zu beschleunigen und die Notwendigkeit zu vermeiden, den Puffer zweimal zu kopieren, wie ich gerade mache?
Vielen Dank, die String_at-Funktion hat den Trick gemacht. Ich muss wirklich besser darin werden, Dokumente zu lesen. Ich habe sie ein paar Mal überprüft und immer noch vermisst! – chrism1