mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
You can now request a raster layer to provide its legend - using the getLegendQPixmap method which is returned as a QPixmap. At the moment it is displayed only on the raster properties dialog, but after the qgis_datasource branch is merged in, the legend pixmap will be shown in the legend sidebar. The legend pixmap is rendered (as opposed to a staticly defined images), and in future versions will reflect histogram settings (range constraints etc). Screenshots illustrating this patch available here:
http://tim.suttonfamily.co.uk/cgi-bin/ids/index.cgi?mode=image&album=/qgis&image=raster_legend_grayscale.png http://tim.suttonfamily.co.uk/cgi-bin/ids/index.cgi?mode=image&album=/qgis&image=raster_legend_paletted.png http://tim.suttonfamily.co.uk/cgi-bin/ids/index.cgi?mode=image&album=/qgis&image=raster_legend_pseudocolor.png git-svn-id: http://svn.osgeo.org/qgis/trunk@458 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
parent
d738ab9af3
commit
82ecab33d7
@ -145,27 +145,27 @@ void QgsRasterLayer::draw(QPainter * theQPainter, QgsRect * theViewExtent, QgsCo
|
|||||||
// HLS, CMYK, or RGB alpha bands are silently ignored for now
|
// HLS, CMYK, or RGB alpha bands are silently ignored for now
|
||||||
for (int i = 1; i <= gdalDataset->GetRasterCount(); i++)
|
for (int i = 1; i <= gdalDataset->GetRasterCount(); i++)
|
||||||
{
|
{
|
||||||
GDALRasterBand *gdalBand = gdalDataset->GetRasterBand( i );
|
GDALRasterBand *myGdalBand = gdalDataset->GetRasterBand( i );
|
||||||
double myNoDataDouble = gdalBand->GetNoDataValue();
|
double myNoDataDouble = myGdalBand->GetNoDataValue();
|
||||||
//std::cout << "Nodata value for band " << i << " is " << myNoDataDouble << "\n" << std::endl;
|
//std::cout << "Nodata value for band " << i << " is " << myNoDataDouble << "\n" << std::endl;
|
||||||
//std::cout << "gdalBand->GetOverviewCount(): " << gdalBand->GetOverviewCount() <<std::endl;
|
//std::cout << "myGdalBand->GetOverviewCount(): " << myGdalBand->GetOverviewCount() <<std::endl;
|
||||||
// make sure we don't exceed size of raster
|
// make sure we don't exceed size of raster
|
||||||
myClippedWidthInt = myClippedWidthInt <? gdalBand->GetXSize();
|
myClippedWidthInt = myClippedWidthInt <? myGdalBand->GetXSize();
|
||||||
myClippedHeightInt = myClippedHeightInt <? gdalBand->GetYSize();
|
myClippedHeightInt = myClippedHeightInt <? myGdalBand->GetYSize();
|
||||||
|
|
||||||
// read entire clipped area of raster band
|
// read entire clipped area of raster band
|
||||||
// treat scandata as a pseudo-multidimensional array
|
// treat scandata as a pseudo-multidimensional array
|
||||||
// RasterIO() takes care of scaling down image
|
// RasterIO() takes care of scaling down image
|
||||||
uint *scandata = (uint*) CPLMalloc(sizeof(uint)*myLayerXDimInt * sizeof(uint)*myLayerYDimInt);
|
uint *scandata = (uint*) CPLMalloc(sizeof(uint)*myLayerXDimInt * sizeof(uint)*myLayerYDimInt);
|
||||||
CPLErr result = gdalBand->RasterIO(
|
CPLErr result = myGdalBand->RasterIO(
|
||||||
GF_Read, myRectXOffsetInt, myRectYOffsetInt, myClippedWidthInt, myClippedHeightInt, scandata, myLayerXDimInt, myLayerYDimInt, GDT_UInt32, 0, 0 );
|
GF_Read, myRectXOffsetInt, myRectYOffsetInt, myClippedWidthInt, myClippedHeightInt, scandata, myLayerXDimInt, myLayerYDimInt, GDT_UInt32, 0, 0 );
|
||||||
|
|
||||||
QString colorInterp = GDALGetColorInterpretationName(gdalBand->GetColorInterpretation());
|
QString myColorInterpretation = GDALGetColorInterpretationName(myGdalBand->GetColorInterpretation());
|
||||||
//std::cout << "Colour Interpretation for this band is : " << colorInterp << std::endl;
|
//std::cout << "Colour Interpretation for this band is : " << myColorInterpretation << std::endl;
|
||||||
if ( colorInterp == "Palette")
|
if ( myColorInterpretation == "Palette")
|
||||||
{
|
{
|
||||||
// print each point in scandata using color looked up in color table
|
// print each point in scandata using color looked up in color table
|
||||||
GDALColorTable *colorTable = gdalBand->GetColorTable();
|
GDALColorTable *colorTable = myGdalBand->GetColorTable();
|
||||||
QImage myQImage=QImage(myLayerXDimInt,myLayerYDimInt,32);
|
QImage myQImage=QImage(myLayerXDimInt,myLayerYDimInt,32);
|
||||||
myQImage.setAlphaBuffer(true);
|
myQImage.setAlphaBuffer(true);
|
||||||
for (int y = 0; y < myLayerYDimInt; y++)
|
for (int y = 0; y < myLayerYDimInt; y++)
|
||||||
@ -215,7 +215,7 @@ void QgsRasterLayer::draw(QPainter * theQPainter, QgsRect * theViewExtent, QgsCo
|
|||||||
}
|
}
|
||||||
//part of the experimental transaparency support
|
//part of the experimental transaparency support
|
||||||
theQPainter->drawImage(myTopLeftPoint.xToInt(), myTopLeftPoint.yToInt(),myQImage);
|
theQPainter->drawImage(myTopLeftPoint.xToInt(), myTopLeftPoint.yToInt(),myQImage);
|
||||||
} else if ( colorInterp == "Red" ) {
|
} else if ( myColorInterpretation == "Red" ) {
|
||||||
// print each point in scandata as the red part of an rgb value
|
// print each point in scandata as the red part of an rgb value
|
||||||
// this assumes that the red band will always be first
|
// this assumes that the red band will always be first
|
||||||
// is that necessarily the case?
|
// is that necessarily the case?
|
||||||
@ -229,7 +229,7 @@ void QgsRasterLayer::draw(QPainter * theQPainter, QgsRect * theViewExtent, QgsCo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if ( colorInterp == "Green" ) {
|
} else if ( myColorInterpretation == "Green" ) {
|
||||||
// print each point in scandata as the green part of an rgb value
|
// print each point in scandata as the green part of an rgb value
|
||||||
theQPainter->setRasterOp(Qt::XorROP);
|
theQPainter->setRasterOp(Qt::XorROP);
|
||||||
for (int y = 0; y < myLayerYDimInt; y++) {
|
for (int y = 0; y < myLayerYDimInt; y++) {
|
||||||
@ -243,7 +243,7 @@ void QgsRasterLayer::draw(QPainter * theQPainter, QgsRect * theViewExtent, QgsCo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
theQPainter->setRasterOp(Qt::CopyROP);
|
theQPainter->setRasterOp(Qt::CopyROP);
|
||||||
} else if ( colorInterp == "Blue" ) {
|
} else if ( myColorInterpretation == "Blue" ) {
|
||||||
// print each point in scandata as the blue part of an rgb value
|
// print each point in scandata as the blue part of an rgb value
|
||||||
theQPainter->setRasterOp(Qt::XorROP);
|
theQPainter->setRasterOp(Qt::XorROP);
|
||||||
for (int y = 0; y < myLayerYDimInt; y++) {
|
for (int y = 0; y < myLayerYDimInt; y++) {
|
||||||
@ -257,7 +257,7 @@ void QgsRasterLayer::draw(QPainter * theQPainter, QgsRect * theViewExtent, QgsCo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
theQPainter->setRasterOp(Qt::CopyROP);
|
theQPainter->setRasterOp(Qt::CopyROP);
|
||||||
} else if ( colorInterp == "Gray" || colorInterp == "Undefined" ) {
|
} else if ( myColorInterpretation == "Gray" || myColorInterpretation == "Undefined" ) {
|
||||||
if (!showGrayAsColorFlag)
|
if (!showGrayAsColorFlag)
|
||||||
{
|
{
|
||||||
//ensure we are not still xoring
|
//ensure we are not still xoring
|
||||||
@ -266,7 +266,7 @@ void QgsRasterLayer::draw(QPainter * theQPainter, QgsRect * theViewExtent, QgsCo
|
|||||||
//if this works ok, I will move it into other layertype renderings
|
//if this works ok, I will move it into other layertype renderings
|
||||||
QImage myQImage=QImage(myLayerXDimInt,myLayerYDimInt,32);
|
QImage myQImage=QImage(myLayerXDimInt,myLayerYDimInt,32);
|
||||||
myQImage.setAlphaBuffer(true);
|
myQImage.setAlphaBuffer(true);
|
||||||
RasterBandStats myRasterBandStats = rasterStatsMap[colorInterp];
|
RasterBandStats myRasterBandStats = rasterStatsMap[myColorInterpretation];
|
||||||
double myRangeDouble=myRasterBandStats.rangeDouble;
|
double myRangeDouble=myRasterBandStats.rangeDouble;
|
||||||
// print each point in scandata with equal parts R, G ,B o make it show as gray
|
// print each point in scandata with equal parts R, G ,B o make it show as gray
|
||||||
for (int y = 0; y < myLayerYDimInt; y++) {
|
for (int y = 0; y < myLayerYDimInt; y++) {
|
||||||
@ -276,7 +276,7 @@ void QgsRasterLayer::draw(QPainter * theQPainter, QgsRect * theViewExtent, QgsCo
|
|||||||
if (myGrayValInt != myRasterBandStats.noDataDouble)
|
if (myGrayValInt != myRasterBandStats.noDataDouble)
|
||||||
{
|
{
|
||||||
//if band is undefined, we need to scale the values to 0-255
|
//if band is undefined, we need to scale the values to 0-255
|
||||||
if (colorInterp=="Undefined")
|
if (myColorInterpretation=="Undefined")
|
||||||
{
|
{
|
||||||
myGrayValInt = static_cast<int>((255/myRangeDouble) * myGrayValInt);
|
myGrayValInt = static_cast<int>((255/myRangeDouble) * myGrayValInt);
|
||||||
}
|
}
|
||||||
@ -301,7 +301,7 @@ void QgsRasterLayer::draw(QPainter * theQPainter, QgsRect * theViewExtent, QgsCo
|
|||||||
int myGreenInt=0;
|
int myGreenInt=0;
|
||||||
int myBlueInt=0;
|
int myBlueInt=0;
|
||||||
//calculate the adjusted matrix stats - which come into affect if the user has chosen
|
//calculate the adjusted matrix stats - which come into affect if the user has chosen
|
||||||
RasterBandStats myAdjustedRasterBandStats = rasterStatsMap[colorInterp];
|
RasterBandStats myAdjustedRasterBandStats = rasterStatsMap[myColorInterpretation];
|
||||||
myAdjustedRasterBandStats.noDataDouble=0;//hard coding for now
|
myAdjustedRasterBandStats.noDataDouble=0;//hard coding for now
|
||||||
//to histogram stretch to a given number of std deviations
|
//to histogram stretch to a given number of std deviations
|
||||||
//see if we are using histogram stretch using stddev and plot only within the selected number of deviations if we are
|
//see if we are using histogram stretch using stddev and plot only within the selected number of deviations if we are
|
||||||
@ -436,8 +436,8 @@ const RasterBandStats QgsRasterLayer::getRasterBandStats(int theBandNo)
|
|||||||
if (rasterStatsMap.size() >= theBandNo)
|
if (rasterStatsMap.size() >= theBandNo)
|
||||||
{
|
{
|
||||||
GDALRasterBand *myGdalBand = gdalDataset->GetRasterBand( theBandNo );
|
GDALRasterBand *myGdalBand = gdalDataset->GetRasterBand( theBandNo );
|
||||||
QString colorInterp = GDALGetColorInterpretationName(myGdalBand->GetColorInterpretation());
|
QString myColorInterpretation = GDALGetColorInterpretationName(myGdalBand->GetColorInterpretation());
|
||||||
return rasterStatsMap[colorInterp];
|
return rasterStatsMap[myColorInterpretation];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/** Return the statistics for a given band name */
|
/** Return the statistics for a given band name */
|
||||||
@ -453,10 +453,10 @@ void QgsRasterLayer::calculateStats()
|
|||||||
{
|
{
|
||||||
RasterBandStats myRasterBandStats;
|
RasterBandStats myRasterBandStats;
|
||||||
GDALRasterBand *myGdalBand = gdalDataset->GetRasterBand( i );
|
GDALRasterBand *myGdalBand = gdalDataset->GetRasterBand( i );
|
||||||
QString colorInterp = GDALGetColorInterpretationName(myGdalBand->GetColorInterpretation());
|
QString myColorInterpretation = GDALGetColorInterpretationName(myGdalBand->GetColorInterpretation());
|
||||||
myRasterBandStats.bandName=colorInterp;
|
myRasterBandStats.bandName=myColorInterpretation;
|
||||||
myRasterBandStats.bandNo=i;
|
myRasterBandStats.bandNo=i;
|
||||||
std::cout << "Getting stats for band " << i << " (" << colorInterp << ")" << std::endl;
|
std::cout << "Getting stats for band " << i << " (" << myColorInterpretation << ")" << std::endl;
|
||||||
// get the dimensions of the raster
|
// get the dimensions of the raster
|
||||||
int myColsInt = myGdalBand->GetXSize();
|
int myColsInt = myGdalBand->GetXSize();
|
||||||
int myRowsInt = myGdalBand->GetYSize();
|
int myRowsInt = myGdalBand->GetYSize();
|
||||||
@ -464,7 +464,7 @@ void QgsRasterLayer::calculateStats()
|
|||||||
myRasterBandStats.elementCountInt=myColsInt*myRowsInt;
|
myRasterBandStats.elementCountInt=myColsInt*myRowsInt;
|
||||||
myRasterBandStats.noDataDouble=myGdalBand->GetNoDataValue();
|
myRasterBandStats.noDataDouble=myGdalBand->GetNoDataValue();
|
||||||
//avoid collecting stats for rgb images for now
|
//avoid collecting stats for rgb images for now
|
||||||
if (colorInterp=="Gray" || colorInterp=="Undefined")
|
if (myColorInterpretation=="Gray" || myColorInterpretation=="Undefined")
|
||||||
{
|
{
|
||||||
//allocate a buffer to hold one row of ints
|
//allocate a buffer to hold one row of ints
|
||||||
int myAllocationSizeInt = sizeof(uint)*myColsInt;
|
int myAllocationSizeInt = sizeof(uint)*myColsInt;
|
||||||
@ -533,7 +533,7 @@ void QgsRasterLayer::calculateStats()
|
|||||||
CPLFree(myScanlineAllocInt);
|
CPLFree(myScanlineAllocInt);
|
||||||
}//end of gray / undefined raster color interp check
|
}//end of gray / undefined raster color interp check
|
||||||
//add this band to the class stats map
|
//add this band to the class stats map
|
||||||
rasterStatsMap[colorInterp]=myRasterBandStats;
|
rasterStatsMap[myColorInterpretation]=myRasterBandStats;
|
||||||
}//end of band loop
|
}//end of band loop
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -626,3 +626,176 @@ void QgsRasterLayer::setGrayBandName(QString theBandNameQString)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//return a pixmap representing a legend image
|
||||||
|
QPixmap QgsRasterLayer::getLegendQPixmap()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Get the adjusted matrix stats
|
||||||
|
//
|
||||||
|
GDALRasterBand *myGdalBand = gdalDataset->GetRasterBand( 1 );
|
||||||
|
double myNoDataDouble = myGdalBand->GetNoDataValue();
|
||||||
|
QString myColorInterpretation = GDALGetColorInterpretationName(myGdalBand->GetColorInterpretation());
|
||||||
|
if ( myColorInterpretation == "Gray" || myColorInterpretation == "Undefined")
|
||||||
|
{
|
||||||
|
RasterBandStats myAdjustedRasterBandStats = rasterStatsMap[myColorInterpretation];
|
||||||
|
myAdjustedRasterBandStats.noDataDouble=0;//hard coding for now
|
||||||
|
//to histogram stretch to a given number of std deviations
|
||||||
|
//see if we are using histogram stretch using stddev and plot only within the selected number of deviations if we are
|
||||||
|
//cout << "stdDevsToPlotDouble: " << cboStdDev->currentText() << " converted to " << stdDevsToPlotDouble << endl;
|
||||||
|
if (stdDevsToPlotDouble > 0)
|
||||||
|
{
|
||||||
|
//work out how far on either side of the mean we should include data
|
||||||
|
float myTotalDeviationDouble = stdDevsToPlotDouble * myAdjustedRasterBandStats.stdDevDouble;
|
||||||
|
//printf("myTotalDeviationDouble: %i\n" , myTotalDeviationDouble );
|
||||||
|
//adjust min and max accordingly
|
||||||
|
//only change min if it is less than mean - (n x deviations)
|
||||||
|
if (myAdjustedRasterBandStats.minValDouble < (myAdjustedRasterBandStats.meanDouble-myTotalDeviationDouble))
|
||||||
|
{
|
||||||
|
myAdjustedRasterBandStats.minValDouble=(myAdjustedRasterBandStats.meanDouble-myTotalDeviationDouble);
|
||||||
|
//cout << "Adjusting minValDouble to: " << myAdjustedRasterBandStats.minValDouble << endl;
|
||||||
|
}
|
||||||
|
//only change max if it is greater than mean + (n x deviations)
|
||||||
|
if (myAdjustedRasterBandStats.maxValDouble > (myAdjustedRasterBandStats.meanDouble + myTotalDeviationDouble))
|
||||||
|
{
|
||||||
|
myAdjustedRasterBandStats.maxValDouble=(myAdjustedRasterBandStats.meanDouble+myTotalDeviationDouble);
|
||||||
|
//cout << "Adjusting maxValDouble to: " << myAdjustedRasterBandStats.maxValDouble << endl;
|
||||||
|
}
|
||||||
|
//update the range
|
||||||
|
myAdjustedRasterBandStats.rangeDouble = myAdjustedRasterBandStats.maxValDouble-myAdjustedRasterBandStats.minValDouble;
|
||||||
|
}
|
||||||
|
//set up the three class breaks for pseudocolour mapping
|
||||||
|
double myBreakSizeDouble = myAdjustedRasterBandStats.rangeDouble / 3;
|
||||||
|
double myClassBreakMin1 = myAdjustedRasterBandStats.minValDouble;
|
||||||
|
double myClassBreakMax1 = myAdjustedRasterBandStats.minValDouble + myBreakSizeDouble;
|
||||||
|
double myClassBreakMin2 = myClassBreakMax1;
|
||||||
|
double myClassBreakMax2 = myClassBreakMin2 + myBreakSizeDouble;
|
||||||
|
double myClassBreakMin3 = myClassBreakMax2;
|
||||||
|
double myClassBreakMax3 = myAdjustedRasterBandStats.maxValDouble;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Create the legend pixmap - note it is generated on the preadjusted stats
|
||||||
|
//
|
||||||
|
QPixmap myLegendQPixmap = QPixmap(100,1);
|
||||||
|
QPainter myQPainter;
|
||||||
|
myQPainter.begin(&myLegendQPixmap);
|
||||||
|
int myPosInt = 0;
|
||||||
|
for (double myDouble=myAdjustedRasterBandStats.minValDouble ;
|
||||||
|
myDouble < myAdjustedRasterBandStats.maxValDouble ;
|
||||||
|
myDouble+=myAdjustedRasterBandStats.rangeDouble/100)
|
||||||
|
{
|
||||||
|
if (!showGrayAsColorFlag)
|
||||||
|
{
|
||||||
|
//draw legend as grayscale
|
||||||
|
int myGrayInt = static_cast<int>((255/myAdjustedRasterBandStats.rangeDouble) * myDouble);
|
||||||
|
myQPainter.setPen( QPen( QColor(myGrayInt, myGrayInt, myGrayInt, QColor::Rgb), 0) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//draw pseudocolor legend
|
||||||
|
if (!invertHistogramFlag)
|
||||||
|
{
|
||||||
|
//check if we are in the first class break
|
||||||
|
if ((myDouble >= myClassBreakMin1) && (myDouble < myClassBreakMax1) )
|
||||||
|
{
|
||||||
|
int myRedInt = 0;
|
||||||
|
int myBlueInt = 255;
|
||||||
|
int myGreenInt = static_cast<int>(((255/myAdjustedRasterBandStats.rangeDouble) * (myDouble-myClassBreakMin1))*3);
|
||||||
|
myQPainter.setPen( QPen( QColor(myRedInt, myGreenInt, myBlueInt, QColor::Rgb), 0) );
|
||||||
|
}
|
||||||
|
//check if we are in the second class break
|
||||||
|
else if ((myDouble >= myClassBreakMin2) && (myDouble < myClassBreakMax2) )
|
||||||
|
{
|
||||||
|
int myRedInt = static_cast<int>(((255/myAdjustedRasterBandStats.rangeDouble) * ((myDouble-myClassBreakMin2)/1))*3);
|
||||||
|
int myBlueInt = static_cast<int>(255-(((255/myAdjustedRasterBandStats.rangeDouble) * ((myDouble-myClassBreakMin2)/1))*3));
|
||||||
|
int myGreenInt = 255;
|
||||||
|
myQPainter.setPen( QPen( QColor(myRedInt, myGreenInt, myBlueInt, QColor::Rgb), 0) );
|
||||||
|
}
|
||||||
|
//otherwise we must be in the third classbreak
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int myRedInt = 255;
|
||||||
|
int myBlueInt = 0;
|
||||||
|
int myGreenInt = static_cast<int>(255-(((255/myAdjustedRasterBandStats.rangeDouble) * ((myDouble-myClassBreakMin3)/1)*3)));
|
||||||
|
myQPainter.setPen( QPen( QColor(myRedInt, myGreenInt, myBlueInt, QColor::Rgb), 0) );
|
||||||
|
}
|
||||||
|
}//end of invert histogram == false check
|
||||||
|
else //invert histogram toggle is off
|
||||||
|
{
|
||||||
|
//check if we are in the first class break
|
||||||
|
if ((myDouble >= myClassBreakMin1) && (myDouble < myClassBreakMax1) )
|
||||||
|
{
|
||||||
|
int myRedInt = 255;
|
||||||
|
int myBlueInt = 0;
|
||||||
|
int myGreenInt = static_cast<int>(((255/myAdjustedRasterBandStats.rangeDouble) * ((myDouble-myClassBreakMin1)/1)*3));
|
||||||
|
myQPainter.setPen( QPen( QColor(myRedInt, myGreenInt, myBlueInt, QColor::Rgb), 0) );
|
||||||
|
}
|
||||||
|
//check if we are in the second class break
|
||||||
|
else if ((myDouble >= myClassBreakMin2) && (myDouble < myClassBreakMax2) )
|
||||||
|
{
|
||||||
|
int myRedInt = static_cast<int>(255-(((255/myAdjustedRasterBandStats.rangeDouble) * ((myDouble-myClassBreakMin2)/1))*3));
|
||||||
|
int myBlueInt = static_cast<int>(((255/myAdjustedRasterBandStats.rangeDouble) * ((myDouble-myClassBreakMin2)/1))*3);
|
||||||
|
int myGreenInt = 255;
|
||||||
|
myQPainter.setPen( QPen( QColor(myRedInt, myGreenInt, myBlueInt, QColor::Rgb), 0) );
|
||||||
|
}
|
||||||
|
//otherwise we must be in the third classbreak
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int myRedInt = 0;
|
||||||
|
int myBlueInt = 255;
|
||||||
|
int myGreenInt = static_cast<int>(255-(((255/myAdjustedRasterBandStats.rangeDouble) * (myDouble-myClassBreakMin3))*3));
|
||||||
|
myQPainter.setPen( QPen( QColor(myRedInt, myGreenInt, myBlueInt, QColor::Rgb), 0) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} //end of show as gray check
|
||||||
|
myQPainter.drawPoint( myPosInt++,0);
|
||||||
|
}
|
||||||
|
myQPainter.end();
|
||||||
|
return myLegendQPixmap;
|
||||||
|
} //end of colour interpretation is palette or gray or undefined check
|
||||||
|
|
||||||
|
else if (myColorInterpretation == "Palette")
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Create the legend pixmap showing red green and blue band mappings
|
||||||
|
//
|
||||||
|
// TODO update this so it actually shows the mappings for paletted images
|
||||||
|
QPixmap myLegendQPixmap = QPixmap(3,1);
|
||||||
|
QPainter myQPainter;
|
||||||
|
myQPainter.begin(&myLegendQPixmap);
|
||||||
|
//draw legend red part
|
||||||
|
myQPainter.setPen( QPen( QColor(255,0,0, QColor::Rgb), 0) );
|
||||||
|
myQPainter.drawPoint( 0,0);
|
||||||
|
//draw legend green part
|
||||||
|
myQPainter.setPen( QPen( QColor(0,255,0, QColor::Rgb), 0) );
|
||||||
|
myQPainter.drawPoint( 1,0);
|
||||||
|
//draw legend blue part
|
||||||
|
myQPainter.setPen( QPen( QColor(0,0,255, QColor::Rgb), 0) );
|
||||||
|
myQPainter.drawPoint( 2,0);
|
||||||
|
myQPainter.end();
|
||||||
|
return myLegendQPixmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Create the legend pixmap showing red green and blue band mappings
|
||||||
|
//
|
||||||
|
//TODO update this so it show the colour band mappins rather than just an rgb swatch
|
||||||
|
QPixmap myLegendQPixmap = QPixmap(3,1);
|
||||||
|
QPainter myQPainter;
|
||||||
|
myQPainter.begin(&myLegendQPixmap);
|
||||||
|
//draw legend red part
|
||||||
|
myQPainter.setPen( QPen( QColor(255,0,0, QColor::Rgb), 0) );
|
||||||
|
myQPainter.drawPoint( 0,0);
|
||||||
|
//draw legend green part
|
||||||
|
myQPainter.setPen( QPen( QColor(0,255,0, QColor::Rgb), 0) );
|
||||||
|
myQPainter.drawPoint( 1,0);
|
||||||
|
//draw legend blue part
|
||||||
|
myQPainter.setPen( QPen( QColor(0,0,255, QColor::Rgb), 0) );
|
||||||
|
myQPainter.drawPoint( 2,0);
|
||||||
|
myQPainter.end();
|
||||||
|
return myLegendQPixmap;
|
||||||
|
|
||||||
|
} //end of mulitband
|
||||||
|
|
||||||
|
}//end of getLegendQPixmap function
|
||||||
|
@ -94,7 +94,8 @@ class QgsRasterLayer : public QgsMapLayer {
|
|||||||
// Accessor and mutator for gray band name
|
// Accessor and mutator for gray band name
|
||||||
QString getGrayBandName() {return grayBandNameQString;};
|
QString getGrayBandName() {return grayBandNameQString;};
|
||||||
void setGrayBandName(QString theBandNameQString);
|
void setGrayBandName(QString theBandNameQString);
|
||||||
|
//get a legend image for this layer
|
||||||
|
QPixmap getLegendQPixmap();
|
||||||
public slots:
|
public slots:
|
||||||
//mutator for transparency
|
//mutator for transparency
|
||||||
void slot_setTransparency(unsigned int); //should be between 0 and 255
|
void slot_setTransparency(unsigned int); //should be between 0 and 255
|
||||||
|
@ -38,6 +38,10 @@ QgsRasterLayerProperties::QgsRasterLayerProperties(QgsMapLayer * lyr) : QgsRaste
|
|||||||
//these properties (layername and label) are provided by the qgsmaplayer superclass
|
//these properties (layername and label) are provided by the qgsmaplayer superclass
|
||||||
leLayerSource->setText(rasterLayer->source());
|
leLayerSource->setText(rasterLayer->source());
|
||||||
leDisplayName->setText(lyr->name());
|
leDisplayName->setText(lyr->name());
|
||||||
|
//update the legend pixmap
|
||||||
|
pixmapLegend->setPixmap(rasterLayer->getLegendQPixmap());
|
||||||
|
pixmapLegend->setScaledContents(true);
|
||||||
|
pixmapLegend->repaint(false);
|
||||||
//set the transparency slider
|
//set the transparency slider
|
||||||
sliderTransparency->setValue(255-rasterLayer->getTransparency());
|
sliderTransparency->setValue(255-rasterLayer->getTransparency());
|
||||||
//decide whether user can change rgb settings
|
//decide whether user can change rgb settings
|
||||||
@ -246,6 +250,11 @@ void QgsRasterLayerProperties::apply()
|
|||||||
rasterLayer->setBlueBandName(cboBlue->currentText());
|
rasterLayer->setBlueBandName(cboBlue->currentText());
|
||||||
rasterLayer->setGrayBandName(cboGray->currentText());
|
rasterLayer->setGrayBandName(cboGray->currentText());
|
||||||
|
|
||||||
|
//update the legend pixmap
|
||||||
|
pixmapLegend->setPixmap(rasterLayer->getLegendQPixmap());
|
||||||
|
pixmapLegend->setScaledContents(true);
|
||||||
|
pixmapLegend->repaint(false);
|
||||||
|
|
||||||
rasterLayer->setlayerName(leDisplayName->text());
|
rasterLayer->setlayerName(leDisplayName->text());
|
||||||
//make sure the layer is redrawn
|
//make sure the layer is redrawn
|
||||||
rasterLayer->triggerRepaint();
|
rasterLayer->triggerRepaint();
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>460</width>
|
<width>460</width>
|
||||||
<height>541</height>
|
<height>543</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="caption">
|
<property name="caption">
|
||||||
@ -59,14 +59,6 @@
|
|||||||
<string>Layer Source:</string>
|
<string>Layer Source:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QLabel" row="2" column="0">
|
|
||||||
<property name="name">
|
|
||||||
<cstring>lblDisplayName</cstring>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Display Name:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QLineEdit" row="3" column="0" rowspan="1" colspan="2">
|
<widget class="QLineEdit" row="3" column="0" rowspan="1" colspan="2">
|
||||||
<property name="name">
|
<property name="name">
|
||||||
<cstring>leDisplayName</cstring>
|
<cstring>leDisplayName</cstring>
|
||||||
@ -80,7 +72,23 @@
|
|||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<spacer row="4" column="1">
|
<widget class="QLabel" row="2" column="0">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>lblDisplayName</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Display Name:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" row="4" column="0">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>lblDisplayName_2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Legend:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<spacer row="6" column="1">
|
||||||
<property name="name">
|
<property name="name">
|
||||||
<cstring>spacer2</cstring>
|
<cstring>spacer2</cstring>
|
||||||
</property>
|
</property>
|
||||||
@ -93,10 +101,24 @@
|
|||||||
<property name="sizeHint">
|
<property name="sizeHint">
|
||||||
<size>
|
<size>
|
||||||
<width>21</width>
|
<width>21</width>
|
||||||
<height>91</height>
|
<height>270</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
|
<widget class="QLabel" row="5" column="0" rowspan="1" colspan="2">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>pixmapLegend</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>10</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</grid>
|
</grid>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget">
|
<widget class="QWidget">
|
||||||
@ -322,8 +344,8 @@
|
|||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string><html><head><meta name="qrichtext" content="1" /></head><body style="font-size:11pt;font-family:Arial">
|
<string><html><head><meta name="qrichtext" content="1" /></head><body style="font-size:12pt;font-family:Arial">
|
||||||
<p style="margin-top:14px"><span style="font-size:13pt;font-weight:600">Notes</span></p>
|
<p style="margin-top:14px"><span style="font-size:14pt;font-weight:600">Notes</span></p>
|
||||||
</body></html>
|
</body></html>
|
||||||
</string>
|
</string>
|
||||||
</property>
|
</property>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user