QGIS API Documentation 3.43.0-Master (32433f7016e)
qgscontrastenhancement.h
Go to the documentation of this file.
1/***************************************************************************
2 qgscontrastenhancement.h - description
3 -------------------
4begin : Mon Oct 22 2007
5copyright : (C) 2007 by Peter J. Ersts
6email : ersts@amnh.org
7
8This class contains code that was originally part of the larger QgsRasterLayer
9class originally created circa 2004 by T.Sutton, Gary E.Sherman, Steve Halasz
10****************************************************************************/
11
12/***************************************************************************
13 * *
14 * This program is free software; you can redistribute it and/or modify *
15 * it under the terms of the GNU General Public License as published by *
16 * the Free Software Foundation; either version 2 of the License, or *
17 * (at your option) any later version. *
18 * *
19 ***************************************************************************/
20
21#ifndef QGSCONTRASTENHANCEMENT_H
22#define QGSCONTRASTENHANCEMENT_H
23
24#include "qgis_core.h"
25#include <limits>
26
27#include "qgis_sip.h"
28#include "qgsraster.h"
29#include <memory>
30
32class QDomDocument;
33class QDomElement;
34class QString;
35
44class CORE_EXPORT QgsContrastEnhancement
45{
46
47 public:
48
58
65
67
71 static double maximumValuePossible( Qgis::DataType dataType )
72 {
73 switch ( dataType )
74 {
76 return std::numeric_limits<unsigned char>::max();
78 return std::numeric_limits<int8_t>::max();
80 return std::numeric_limits<unsigned short>::max();
82 return std::numeric_limits<short>::max();
84 return std::numeric_limits<unsigned int>::max();
86 return std::numeric_limits<int>::max();
88 return std::numeric_limits<float>::max();
90 return std::numeric_limits<double>::max();
92 return std::numeric_limits<short>::max();
94 return std::numeric_limits<int>::max();
96 return std::numeric_limits<float>::max();
98 return std::numeric_limits<double>::max();
102 // XXX - mloskot: not handled?
103 break;
104 }
105
106 return std::numeric_limits<double>::max();
107 }
108
112 static double minimumValuePossible( Qgis::DataType dataType )
113 {
114 switch ( dataType )
115 {
117 return std::numeric_limits<unsigned char>::min();
119 return std::numeric_limits<int8_t>::min();
121 return std::numeric_limits<unsigned short>::min();
123 return std::numeric_limits<short>::min();
125 return std::numeric_limits<unsigned int>::min();
127 return std::numeric_limits<int>::min();
129 return std::numeric_limits<float>::max() * -1.0;
131 return std::numeric_limits<double>::max() * -1.0;
133 return std::numeric_limits<short>::min();
135 return std::numeric_limits<int>::min();
137 return std::numeric_limits<float>::max() * -1.0;
139 return std::numeric_limits<double>::max() * -1.0;
143 // XXX - mloskot: not handled?
144 break;
145 }
146
147 return std::numeric_limits<double>::max() * -1.0;
148 }
149
153 static QString contrastEnhancementAlgorithmString( ContrastEnhancementAlgorithm algorithm );
154
158 static ContrastEnhancementAlgorithm contrastEnhancementAlgorithmFromString( const QString &contrastEnhancementString );
159
161 double maximumValue() const { return mMaximumValue; }
162
164 double minimumValue() const { return mMinimumValue; }
165
166 ContrastEnhancementAlgorithm contrastEnhancementAlgorithm() const { return mContrastEnhancementAlgorithm; }
167
171 int enhanceContrast( double value );
172
177 bool isValueInDisplayableRange( double value );
178
186 void setContrastEnhancementAlgorithm( ContrastEnhancementAlgorithm algorithm, bool generateTable = true );
187
192 void setContrastEnhancementFunction( QgsContrastEnhancementFunction *function SIP_TRANSFER );
193
204 void setMaximumValue( double value, bool generateTable = true );
205
216 void setMinimumValue( double value, bool generateTable = true );
217
218 void writeXml( QDomDocument &doc, QDomElement &parentElem ) const;
219
220 void readXml( const QDomElement &elem );
221
230 void toSld( QDomDocument &doc, QDomElement &element ) const;
231
232 private:
233#ifdef SIP_RUN
234 const QgsContrastEnhancement &operator=( const QgsContrastEnhancement & );
235#endif
236
238 ContrastEnhancementAlgorithm mContrastEnhancementAlgorithm = NoEnhancement;
239
241 std::unique_ptr< QgsContrastEnhancementFunction > mContrastEnhancementFunction;
242
244 bool mEnhancementDirty = false;
245
247 int *mLookupTable = nullptr;
248
250 double mMinimumValue;
251
253 double mMaximumValue;
254
256 Qgis::DataType mRasterDataType;
257
259 double mRasterDataTypeRange;
260
262 double mLookupTableOffset;
263
265 bool generateLookupTable();
266
268 int calculateContrastEnhancementValue( double );
269
270};
271
272#endif
DataType
Raster data types.
Definition qgis.h:351
@ CInt32
Complex Int32.
@ Float32
Thirty two bit floating point (float)
@ CFloat64
Complex Float64.
@ Int16
Sixteen bit signed integer (qint16)
@ ARGB32_Premultiplied
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32_Premultiplied.
@ Int8
Eight bit signed integer (qint8) (added in QGIS 3.30)
@ UInt16
Sixteen bit unsigned integer (quint16)
@ Byte
Eight bit unsigned integer (quint8)
@ UnknownDataType
Unknown or unspecified type.
@ ARGB32
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32.
@ Int32
Thirty two bit signed integer (qint32)
@ Float64
Sixty four bit floating point (double)
@ CFloat32
Complex Float32.
@ CInt16
Complex Int16.
@ UInt32
Thirty two bit unsigned integer (quint32)
A contrast enhancement function is the base class for all raster contrast enhancements.
Handles contrast enhancement and clipping.
ContrastEnhancementAlgorithm
This enumerator describes the types of contrast enhancement algorithms that can be used.
@ StretchToMinimumMaximum
Linear histogram.
@ NoEnhancement
Default color scaling algorithm, no scaling is applied.
static double maximumValuePossible(Qgis::DataType dataType)
Helper function that returns the maximum possible value for a data type.
double minimumValue() const
Returns the minimum value for the contrast enhancement range.
static double minimumValuePossible(Qgis::DataType dataType)
Helper function that returns the minimum possible value for a data type.
const QgsContrastEnhancement & operator=(const QgsContrastEnhancement &)=delete
ContrastEnhancementAlgorithm contrastEnhancementAlgorithm() const
double maximumValue() const
Returns the maximum value for the contrast enhancement range.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into allowing algorithms to be written in pure substantial changes are required in order to port existing x Processing algorithms for QGIS x The most significant changes are outlined not GeoAlgorithm For algorithms which operate on features one by consider subclassing the QgsProcessingFeatureBasedAlgorithm class This class allows much of the boilerplate code for looping over features from a vector layer to be bypassed and instead requires implementation of a processFeature method Ensure that your algorithm(or algorithm 's parent class) implements the new pure virtual createInstance(self) call
#define SIP_TRANSFER
Definition qgis_sip.h:36