00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef QGSCONTRASTENHANCEMENT_H
00022 #define QGSCONTRASTENHANCEMENT_H
00023
00024 #include <limits>
00025
00026 class QgsContrastEnhancementFunction;
00027
00033 class CORE_EXPORT QgsContrastEnhancement
00034 {
00035
00036 public:
00037
00039 enum ContrastEnhancementAlgorithm
00040 {
00041 NoEnhancement,
00042 StretchToMinimumMaximum,
00043 StretchAndClipToMinimumMaximum,
00044 ClipToMinimumMaximum,
00045 UserDefinedEnhancement
00046 };
00047
00055 enum QgsRasterDataType
00056 {
00057 QGS_Unknown = 0, QGS_Byte = 1, QGS_UInt16 = 2, QGS_Int16 = 3, QGS_UInt32 = 4, QGS_Int32 = 5, QGS_Float32 = 6, QGS_Float64 = 7, QGS_CInt16 = 8, QGS_CInt32 = 9, QGS_CFloat32 = 10, QGS_CFloat64 = 11,
00069 QGS_TypeCount = 12
00070 };
00071
00072 QgsContrastEnhancement( QgsContrastEnhancement::QgsRasterDataType theDatatype = QGS_Byte );
00073 ~QgsContrastEnhancement();
00074
00075
00076
00077
00078
00079
00081 static double maximumValuePossible( QgsRasterDataType );
00082
00084 static double minimumValuePossible( QgsRasterDataType );
00085
00086
00087
00088
00089
00090
00092 double maximumValue() const { return mMaximumValue; }
00093
00095 double minimumValue() const { return mMinimumValue; }
00096
00097 ContrastEnhancementAlgorithm contrastEnhancementAlgorithm() { return mContrastEnhancementAlgorithm; }
00098
00099
00100
00101
00102
00103
00105 int enhanceContrast( double );
00106
00108 bool isValueInDisplayableRange( double );
00109
00111 void setContrastEnhancementAlgorithm( ContrastEnhancementAlgorithm, bool generateTable = true );
00112
00114 void setContrastEnhancementFunction( QgsContrastEnhancementFunction* );
00115
00117 void setMaximumValue( double, bool generateTable = true );
00118
00120 void setMinimumValue( double, bool generateTable = true );
00121
00122 private:
00124 ContrastEnhancementAlgorithm mContrastEnhancementAlgorithm;
00125
00127 QgsContrastEnhancementFunction* mContrastEnhancementFunction;
00128
00130 bool mEnhancementDirty;
00131
00133 double mLookupTableOffset;
00134
00136 int *mLookupTable;
00137
00139 double mMinimumValue;
00140
00142 double mMaximumValue;
00143
00145 QgsRasterDataType mRasterDataType;
00146
00148 double mRasterDataTypeRange;
00149
00150
00151
00153 bool generateLookupTable();
00154
00156 int calculateContrastEnhancementValue( double );
00157 };
00158
00159 #endif