On Sun, 4 Nov 2012 09:34:32 -0800, David Cortesi <davecort...@gmail.com> wrote: >>> When I try assignment, >>> vptr[1] = 0x00 >>> I get the message, >>> TypeError: 'int' does not have the buffer interface > >> I can't reproduce this - can you send a short, complete test that >> demonstrates the problem. > > Here you go: Ubuntu 12.10, PyQt4 4.9.3-4 > > $ python > Python 2.7.3 (default, Sep 26 2012, 21:53:58) > [GCC 4.7.2] on linux2 > Type "help", "copyright", "credits" or "license" for more information. >>>> from PyQt4 import QtCore, QtGui >>>> img = QtGui.QImage(100,100,QtGui.QImage.Format_ARGB32) >>>> img.fill(0xdeadbeef) >>>> vptr = img.bits() >>>> vptr.setsize(img.byteCount()) >>>> vptr[0] = 0 > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: 'int' does not have the buffer interface >>>>
Fixed in tonight's SIP snapshot - thanks. > Particularly helpful for this use-case (QImage) would be the ability > to set or retrieve 32-bit words via the voidptr. It isn't obvious to > me how to get and set ARGB words from the image data accessed this > way. The following seems awkward, and I am dubious it would be any > faster than just calling img.pixel() -- > > def get_pixel_as_word( vptr, pixno ) : > offset = pixno<<2 > return (vptr[offset] << 12) | (vptr[1+offset] << 8) | > vptr[2+offset] << 4) | vptr[3+offset] > > More pythonic and maybe faster: > > def get_pixel_as_tuple( vptr, pixno ) : > offset = pixno<<2 > return (vptr[offset], vptr[1+offset], vptr[2+offset], vptr[3+offset]) Maybe QImage should support the (new) buffer protocol reflecting the image format so that the data could be accessed via memoryview. Phil _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt