code: def setImage(self, image=None, autoLevels=None, **kargs):
          
          
          profile = debug.Profiler()
  
          gotNewData = False
          if image is None:
              if self.image is None:
                  return
          else:
              gotNewData = True
              shapeChanged = (self.image is None or image.shape != self.image.shape)
              image = image.view(np.ndarray)
              if self.image is None or image.dtype != self.image.dtype:
                  self._effectiveLut = None
              self.image = image
              if self.image.shape[0] > 2**15-1 or self.image.shape[1] > 2**15-1:
                  if 'autoDownsample' not in kargs:
                      kargs['autoDownsample'] = True
              if shapeChanged:
                  self.prepareGeometryChange()
                  self.informViewBoundsChanged()
  
          profile()
  
          if autoLevels is None:
              if 'levels' in kargs:
                  autoLevels = False
              else:
                  autoLevels = True
          if autoLevels:
              img = self.image
              while img.size > 2**16:
                  img = img[::2, ::2]
              mn, mx = img.min(), img.max()
              if mn == mx:
                  mn = 0
                  mx = 255
              kargs['levels'] = [mn,mx]
  
          profile()
  
          self.setOpts(update=False, **kargs)
  
          profile()
  
          self.qimage = None
          self.update()
  
          profile()
  
          if gotNewData:
              self.sigImageChanged.emit()
docs: Same this as ImageItem.setImage, but we don't update the drawing