def crop(self, xa, xb, ya, yb):
        """
        Crops the image. Two points :
        
            - We use numpy conventions
            xa = 200 and xb = 400 will give you a width of 200 pixels !
        
            - We crop relative to the current array (i.e. not necessarily to the original array !)
            This means you can crop several times in a row with xa = 10, it will each time remove 10 pixels in x !
        
        But we update the crop region specifications, so that the object remembers how it was cut.
        
        Please give positive integers in compatible ranges, no checks are made.
        
        """
        
        if self.pilimage != None:
            raise RuntimeError, "Cannot crop anymore, PIL image already exists !"
        
        if self.verbose:
            print "Cropping : [%i:%i, %i:%i]" % (xa, xb, ya, yb)
        self.numpyarray = self.numpyarray[xa:xb, ya:yb]
        
        self.xa += xa
        self.ya += ya
        self.xb = self.xa + (xb - xa)
        self.yb = self.ya + (yb - ya)