コード例 #1
0
ファイル: manage_QGIS.py プロジェクト: amondot/TerreImage
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()