def getRGBData(self):
     "Return byte array of RGB data as string"
     if self._data is None:
         self._dataA = None
         if sys.platform[0:4] == 'java':
             import jarray  # TODO: Move to top.
             from java.awt.image import PixelGrabber
             width, height = self.getSize()
             buffer = jarray.zeros(width * height, 'i')
             pg = PixelGrabber(self._image, 0, 0, width, height, buffer, 0, width)
             pg.grabPixels()
             # there must be a way to do this with a cast not a byte-level loop,
             # I just haven't found it yet...
             pixels = []
             a = pixels.append
             for i in range(len(buffer)):
                 rgb = buffer[i]
                 a(chr((rgb >> 16) & 0xff))
                 a(chr((rgb >> 8) & 0xff))
                 a(chr(rgb & 0xff))
             self._data = ''.join(pixels)
             self.mode = 'RGB'
         else:
             im = self._image
             mode = self.mode = im.mode
             if mode == 'RGBA':
                 im.load()
                 self._dataA = PmlImageReader(im.split()[3])
                 im = im.convert('RGB')
                 self.mode = 'RGB'
             elif mode not in ('L', 'RGB', 'CMYK'):
                 im = im.convert('RGB')
                 self.mode = 'RGB'
             self._data = im.tostring()
     return self._data
 def getRGBData(self):
     "Return byte array of RGB data as string"
     try:
         if self._data is None:
             self._dataA = None
             if sys.platform[0:4] == 'java':
                 import jarray
                 from java.awt.image import PixelGrabber
                 width, height = self.getSize()
                 buffer = jarray.zeros(width * height, 'i')
                 pg = PixelGrabber(self._image, 0, 0, width, height, buffer,
                                   0, width)
                 pg.grabPixels()
                 # there must be a way to do this with a cast not a byte-level loop,
                 # I just haven't found it yet...
                 pixels = []
                 a = pixels.append
                 for i in range(len(buffer)):
                     rgb = buffer[i]
                     a(chr((rgb >> 16) & 0xff))
                     a(chr((rgb >> 8) & 0xff))
                     a(chr(rgb & 0xff))
                 self._data = ''.join(pixels)
                 self.mode = 'RGB'
             else:
                 im = self._image
                 mode = self.mode = im.mode
                 if mode in ('LA', 'RGBA'):
                     if getattr(Image, 'VERSION', '').startswith('1.1.7'):
                         im.load()
                     self._dataA = ImageReader(
                         im.split()[3 if mode == 'RGBA' else 1])
                     nm = mode[:-1]
                     im = im.convert(nm)
                     self.mode = nm
                 elif mode not in ('L', 'RGB', 'CMYK'):
                     if im.format == 'PNG' and im.mode == 'P' and 'transparency' in im.info:
                         im = im.convert('RGBA')
                         self._dataA = ImageReader(im.split()[3])
                         im = im.convert('RGB')
                     else:
                         im = im.convert('RGB')
                     self.mode = 'RGB'
                 self._data = (im.tobytes
                               if hasattr(im, 'tobytes') else im.tostring
                               )()  #make pillow and PIL both happy, for now
         return self._data
     except:
         annotateException('\nidentity=%s' % self.identity())