def custom_stretch(the_raster_layer, values, canvas, mono = False): """ Applies a contrast between min and max. If given min and max are 0, then calculates the min and max from gdal. """ # logger.info("#######################") logger.info("custom stretch: values") logger.info(values) # print "custom stretch" # print canvas # print "layer :", the_raster_layer # type of layer : raster, vector, other type_of_layer = the_raster_layer.type() # take the layer renderer to get the min and max layer_renderer = the_raster_layer.renderer() # for qgis > 1.9 data_provider = the_raster_layer.dataProvider() # print "values", values # the layer has to be a raster layer if type_of_layer == 1: if (the_raster_layer.rasterType() == 0 or mono) and layer_renderer: min_layer, max_layer = values[0] # gray band # layer_renderer <qgis.core.QgsSingleBandGrayRenderer object at 0x514caf0> gray_enhancement = QgsContrastEnhancement(data_provider.dataType(1)) # take the contrast enhancement of the layer threw the renderer if gray_enhancement: gray_enhancement.setContrastEnhancementAlgorithm(1) # qgis 1.9 gray_enhancement.setMinimumValue(min_layer) gray_enhancement.setMaximumValue(max_layer) layer_renderer.setContrastEnhancement(gray_enhancement) elif the_raster_layer.rasterType() == 2 and layer_renderer: # print "layer 3 bandes" min_red, max_red = values[0] min_green, max_green = values[1] min_blue, max_blue = values[2] logger.debug("red : " + str(min_red) + " " + str(max_red)) logger.debug("green : " + str(min_green) + " " + str(max_green)) logger.debug("blue : " + str(min_blue) + " " + str(max_blue)) red_enhancement = QgsContrastEnhancement(data_provider.dataType(1)) green_enhancement = QgsContrastEnhancement(data_provider.dataType(2)) blue_enhancement = QgsContrastEnhancement(data_provider.dataType(3)) logger.debug("red_enhancement : " + str(red_enhancement)) logger.debug("green_enhancement : " + str(green_enhancement)) logger.debug("blue_enhancement : " + str(blue_enhancement)) # set stretch to min max red_enhancement.setMinimumValue(min_red) red_enhancement.setMaximumValue(max_red) green_enhancement.setMinimumValue(min_green) green_enhancement.setMaximumValue(max_green) blue_enhancement.setMinimumValue(min_blue) blue_enhancement.setMaximumValue(max_blue) logger.debug("red (1): " + str(red_enhancement.minimumValue()) + " " + str(red_enhancement.maximumValue())) logger.debug("green (1): " + str(green_enhancement.minimumValue()) + " " + str(green_enhancement.maximumValue())) logger.debug("blue (1): " + str(blue_enhancement.minimumValue()) + " " + str(blue_enhancement.maximumValue())) red_enhancement.setContrastEnhancementAlgorithm(1) green_enhancement.setContrastEnhancementAlgorithm(1) blue_enhancement.setContrastEnhancementAlgorithm(1) logger.debug("red (2): " + str(red_enhancement.minimumValue()) + " " + str(red_enhancement.maximumValue())) logger.debug("green (2): " + str(green_enhancement.minimumValue()) + " " + str(green_enhancement.maximumValue())) logger.debug("blue (2): " + str(blue_enhancement.minimumValue()) + " " + str(blue_enhancement.maximumValue())) # print "blue enhancement", blue_enhancement # print "blue max", blue_enhancement.maximumValue() # print "blue min", blue_enhancement.minimumValue() layer_renderer.setRedContrastEnhancement(red_enhancement) # , QgsRaster.ContrastEnhancementCumulativeCut ) layer_renderer.setGreenContrastEnhancement(green_enhancement) # , QgsRaster.ContrastEnhancementCumulativeCut ) layer_renderer.setBlueContrastEnhancement(blue_enhancement) # , QgsRaster.ContrastEnhancementCumulativeCut ) # print "layer renderer" red_enhancement_debug = layer_renderer.redContrastEnhancement() green_enhancement_debug = layer_renderer.greenContrastEnhancement() blue_enhancement_debug = layer_renderer.blueContrastEnhancement() logger.debug("red (3): " + str(red_enhancement_debug.minimumValue()) + " " + str(red_enhancement_debug.maximumValue())) logger.debug("green (3): " + str(green_enhancement_debug.minimumValue()) + " " + str(green_enhancement_debug.maximumValue())) logger.debug("blue (3): " + str(blue_enhancement_debug.minimumValue()) + " " + str(blue_enhancement_debug.maximumValue())) # print "end" the_raster_layer.setCacheImage(None) the_raster_layer.triggerRepaint() # print "2" canvas.refresh() canvas.repaint()