On 29 dic, 12:42, [EMAIL PROTECTED] wrote: > am a beginner in python and PIL .I need to read an RGB 8 bit image > (am using jpeg )and pack the rgb color values into a double value so i > can store the image as a list of pixelvalues.From my application i > should be able to call rgbimage1.getpixellist() to retrieve the double > values of an image.
(May I ask why an accessor like getpixellist() instead of simply rgbimage1.pixellist?) > Do i need to create a new class for this?I made something like > > class myrgbimage: > def __init__(self,filename): > > def _readimage(self): > im=Image.open(filename) > self._readImage(filename) > self._wd,self._ht=im.size > for y in range(self._ht): > for x in range(self._wd): > r,g,b=im.getpixel((x,y)) > pval=self.rgbTodoubleval((r,g,b)) > self._pixellist.append(pval) The PIL docs at [1] say that using getpixel is very slow, and suggest to use getdata instead. And you want a flat representation anyway, just like getdata. So replace the for loops above with: rgbTodoubleval = self.rgbTodoubleval self._pixellist = [rgbTodoubleval(pix) for pix in im.getdata()] I've not tested it, but should be faster. > def rgbTodoubleval(self,(r,g,b)): > alpha=255 > pixelvalue=(alpha<<24)|(r<<16 )|( g<<8) | b > return pixelvalue I don't get the name - why "rgb to double"? This does not return a "double", but a long integer, even if you intended to return a 32 bit integer. This version returns an integer: from struct import pack, unpack def rgbTodoubleval((r,g,b)): alpha=255 return unpack("l", pack("BBBB", b, g, r, alfa))[0] It *may*, or not, be what you want... -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list