def setFlagQimage(self): (nx,ny) = self._image_for_display.shape image_for_display = self._image_for_display.copy() if not self._flags_array is None: if self.complex: image_for_display[:nx//2,:] = numpy.where(self._flags_array,0,self._image_for_display[:nx//2,:]) image_for_display[nx//2:,:] = numpy.where(self._flags_array,0,self._image_for_display[nx//2:,:]) else: image_for_display = numpy.where(self._flags_array,0,self._image_for_display) if not self._nan_flags_array is None: if self.complex: image_for_display[:nx//2,:] = numpy.where(self._nan_flags_array,1,image_for_display[:nx//2,:]) image_for_display[nx//2:,:] = numpy.where(self._nan_flags_array,1,image_for_display[nx//2:,:]) else: image_for_display = numpy.where(self._nan_flags_array,1,image_for_display) self.flags_Qimage = convertToQImage(image_for_display,True).mirrored(0, 1) # set color scale a la HippoDraw Scale if self.display_type == "hippo": self.toHippo(self.flags_Qimage) # set color scale to Grayscale if self.display_type == "grayscale": self.toGrayScale(self.flags_Qimage) # set zero to black to display flag image pixels in black self.flags_Qimage.setColor(0, qRgb(self.flag_colour, self.flag_colour, self.flag_colour)) self.flags_Qimage.setColor(1, qRgb(self.nan_colour, self.nan_colour, self.nan_colour))
def toHippo(self, Qimage): dv = 255.0 vmin = 1.0 for i in range(2, 256): r = 1.0 g = 1.0 b = 1.0 v = 1.0 * i if (v < (vmin + 0.25 * dv)): r = 0; if dv != 0: g = 4 * (v - vmin) / dv; elif (v < (vmin + 0.5 * dv)): r = 0; if dv != 0: b = 1 + 4 * (vmin + 0.25 * dv - v) / dv; elif (v < (vmin + 0.75 * dv)): b = 0; if dv != 0: r = 4 * (v - vmin - 0.5 * dv) / dv; else: b = 0; if dv != 0: g = 1 + 4 * (vmin + 0.75 * dv - v) / dv; else: r = 0 red = int ( r * 255. ) green = int ( g * 255. ) blue = int ( b * 255. ) # the following call will use the previous computations to # set up a hippo-like color display Qimage.setColor(i, qRgb(red, green, blue))
def to_QImage(self, image): # convert to 8 bit image image_for_display = None if image.dtype == numpy.complex64 or image.dtype == numpy.complex128: self.complex = True real_array = image.real if self.log_scale: temp_array = self.convert_to_log(real_array) temp_array = self.convert_to_log(real_array) if not self.r_cmin is None and not self.r_cmax is None: limits = self.convert_limits([self.r_cmin,self.r_cmax]) else: limits = [self.r_cmin, self.r_cmax] byte_image = bytescale(temp_array,limits) else: limits = [self.r_cmin,self.r_cmax] byte_image = bytescale(real_array,limits) (nx,ny) = real_array.shape image_for_display = numpy.empty(shape=(nx*2,ny),dtype=byte_image.dtype); image_for_display[:nx,:] = byte_image imag_array = image.imag if self.log_scale: temp_array = self.convert_to_log(imag_array) if not self.i_cmin is None and not self.i_cmax is None: limits = self.convert_limits([self.i_cmin,self.i_cmax]) else: limits = [self.i_cmin, self.i_cmax] byte_image = bytescale(temp_array,limits) else: limits = [self.i_cmin,self.i_cmax] byte_image = bytescale(imag_array,limits) image_for_display[nx:,:] = byte_image else: if self.log_scale: temp_array = self.convert_to_log(image) if not self.r_cmin is None and not self.r_cmax is None: limits = self.convert_limits([self.r_cmin,self.r_cmax]) else: limits = [self.r_cmin, self.r_cmax] #print 'to_QImage log limits = ', limits image_for_display = bytescale(temp_array,limits) else: limits = [self.r_cmin,self.r_cmax] #print 'to_QImage real limits = ', limits image_for_display = bytescale(image,limits) # turn image into a QImage, and return result if not self._nan_flags_array is None: if self.complex: image_for_display[:nx,:] = numpy.where(self._nan_flags_array,1,image_for_display[:nx,:]) image_for_display[nx:,:] = numpy.where(self._nan_flags_array,1,image_for_display[nx:,:]) else: image_for_display = numpy.where(self._nan_flags_array,1,image_for_display) self._image_for_display = image_for_display result = convertToQImage(image_for_display,True).mirrored(0, 1) # always suppress NaNs if not self._nan_flags_array is None: result.setColor(1, qRgb(self.nan_colour, self.nan_colour, self.nan_colour)) return result
def setData(self, xyzs, xRange=None, yRange=None): self.xyzs = xyzs shape = xyzs.shape if not xRange: xRange = (0, shape[0]) if not yRange: yRange = (0, shape[1]) self.xMap = QwtScaleMap(0, xyzs.shape[0], *xRange) self.plot().setAxisScale(QwtPlot.xBottom, *xRange) self.yMap = QwtScaleMap(0, xyzs.shape[1], *yRange) self.plot().setAxisScale(QwtPlot.yLeft, *yRange) self.image = toQImage(bytescale(self.xyzs)).mirrored(False, True) for i in range(0, 256): self.image.setColor(i, qRgb(i, 0, 255 - i))
def setData(self, xyzs, xRange = None, yRange = None): self.xyzs = xyzs shape = xyzs.shape if not xRange: xRange = (0, shape[0]) if not yRange: yRange = (0, shape[1]) self.xMap = QwtScaleMap(0, xyzs.shape[0], *xRange) self.plot().setAxisScale(QwtPlot.xBottom, *xRange) self.yMap = QwtScaleMap(0, xyzs.shape[1], *yRange) self.plot().setAxisScale(QwtPlot.yLeft, *yRange) self.image = toQImage(bytescale(self.xyzs)).mirrored(False, True) for i in range(0, 256): self.image.setColor(i, qRgb(i, 0, 255-i))
def rgb(self, mode, pos): if pos <= 0.: return self.__stops[0].rgb if pos >= 1.0: return self.__stops[-1].rgb index = self.findUpper(pos) if mode == QwtLinearColorMap.FixedColors: return self.__stops[index-1].rgb else: s1 = self.__stops[index-1] ratio = (pos-s1.pos)/s1.posStep r = int(s1.r0 + ratio*s1.rStep) g = int(s1.g0 + ratio*s1.gStep) b = int(s1.b0 + ratio*s1.bStep) if self.__doAlpha: if s1.aStep: a = int(s1.a0 + ratio*s1.aStep) return qRgba(r, g, b, a) else: return qRgba(r, g, b, s1.a) else: return qRgb(r, g, b)
def rgb(self, mode, pos): if pos <= 0.: return self.__stops[0].rgb if pos >= 1.0: return self.__stops[-1].rgb index = self.findUpper(pos) if mode == QwtLinearColorMap.FixedColors: return self.__stops[index - 1].rgb else: s1 = self.__stops[index - 1] ratio = (pos - s1.pos) / s1.posStep r = int(s1.r0 + ratio * s1.rStep) g = int(s1.g0 + ratio * s1.gStep) b = int(s1.b0 + ratio * s1.bStep) if self.__doAlpha: if s1.aStep: a = int(s1.a0 + ratio * s1.aStep) return qRgba(r, g, b, a) else: return qRgba(r, g, b, s1.a) else: return qRgb(r, g, b)
def oldToQImage(array): """Converts a numpy array to a QImage A Python version of PyQt4.Qwt5.toQImage(array) in PyQwt < 5.2. Function written by Gerard Vermeulen """ if array.ndim != 2: raise RuntimeError('array must be 2-D') nx, ny = array.shape # width, height xstride, ystride = array.strides if array.dtype == numpy.uint8: image = QImage(nx, ny, QImage.Format_Indexed8) f_array = numpy.reshape(array,(nx*ny,),order='F') for j in range(ny): pointer = image.scanLine(j) pointer.setsize(nx*array.itemsize) memory = numpy.frombuffer(pointer, numpy.uint8) first_value = j*nx last_value = (j+1)*nx memory[:] = f_array[first_value:last_value] image.setColorCount(256) for i in range(256): image.setColor(i, qRgb(i, i, i)) return image elif array.dtype == numpy.uint32: image = Qt.QImage( array.tostring(), width, height, Qt.QImage.Format_ARGB32) f_array = numpy.reshape(array,(nx*ny,),order='F') for j in xrange(ny): pointer = image.scanLine(j) pointer.setsize(nx*array.itemsize) memory = numpy.frombuffer(pointer, numpy.uint32) first_value = j*nx last_value = (j+1)*nx memory[:] = f_array[first_value:last_value] return image else: raise RuntimeError('array.dtype must be uint8 or uint32')
def newToQImage(array): """Converts a numpy array to a QImage A Python version of PyQt4.Qwt5.toQImage(array) in PyQwt >= 5.2. Function written by Gerard Vermeulen """ if array.ndim != 2: raise RuntimeError('array must be 2-D') height, width = array.shape if array.dtype == numpy.uint8: # image = QImage(array, width, height, QImage.Format_Indexed8) # The next statement shows that QImage does not increase the # reference count of the buffer object to keep the data valid. image = Qt.QImage( array.tostring(), width, height, Qt.QImage.Format_Indexed8) image.setNumColors(256) for i in range(256): image.setColor(i, qRgb(i, i, i)) return image elif array.dtype == numpy.uint32: image = Qt.QImage( array.tostring(), width, height, Qt.QImage.Format_ARGB32) return image else: raise RuntimeError('array.dtype must be uint8 or uint32')
def toGrayScale(self, Qimage): for i in range(0, 256): Qimage.setColor(i, qRgb(i, i, i))