00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012
00013 #ifndef LTI_PIXEL_H
00014 #define LTI_PIXEL_H
00015
00016
00017 #include "lti_sample.h"
00018
00019
00020 LT_BEGIN_NAMESPACE(LizardTech)
00021
00022
00023
00036 class LTIPixel
00037 {
00038 public:
00045 LTIPixel(void);
00046
00058 LTIPixel(LTIColorSpace colorSpace,
00059 lt_uint16 numBands,
00060 LTIDataType dataType,
00061 const LTISample* samples = NULL);
00062
00073 LTIPixel(const LTIPixel &pixel,
00074 const lt_uint16 *bandSelection,
00075 lt_uint16 numBands);
00076
00090 LTIPixel(const LTISample* samples,
00091 lt_uint16 numBands,
00092 LTIColorSpace colorSpace = LTI_COLORSPACE_INVALID);
00093
00097 LTIPixel(const LTIPixel&);
00098
00102 virtual ~LTIPixel();
00103
00107 LTIPixel& operator=(const LTIPixel&);
00108
00112 bool operator==(const LTIPixel&) const;
00113
00117 bool operator!=(const LTIPixel&) const;
00118
00127 lt_uint16 getNumBands() const;
00128
00137 lt_uint16 getNumBandsWithoutAlpha() const;
00138
00148 LTIDataType getDataType() const;
00149 bool isSignedData() const;
00150
00158 LTIColorSpace getColorSpace() const;
00159
00167 LTIColorSpace getColorSpaceWithoutAlpha() const;
00168
00174 bool hasAlphaBand() const;
00175
00181 bool hasPreMultipliedAlphaBand() const;
00182
00186 bool isMultiSpectral() const;
00187
00198 lt_uint32 getNumBytes() const;
00199
00210 lt_uint32 getNumBytesWithoutAlpha() const;
00211
00220 lt_uint32 getMaxBytesPerSample() const;
00221
00231 LT_STATUS checkImpedance(const LTIPixel& pixel,
00232 bool enforceColorSpace = true) const;
00233 LT_STATUS checkImpedanceWithoutAlpha(const LTIPixel& pixel) const;
00234
00235 LTISample *getSamples() const;
00236 LTISample &getSample(lt_uint16) const;
00237
00238
00239 #ifndef DEPRECATE_PIXEL_HELPERS
00240
00244
00254 const void* getSampleValueAddr(lt_uint16 band) const;
00255
00265 lt_uint8 getSampleValueUint8(lt_uint16 band) const;
00266
00276 lt_int8 getSampleValueSint8(lt_uint16 band) const;
00277
00287 lt_uint16 getSampleValueUint16(lt_uint16 band) const;
00288
00298 lt_int16 getSampleValueSint16(lt_uint16 band) const;
00299
00309 lt_uint32 getSampleValueUint32(lt_uint16 band) const;
00310
00320 lt_int32 getSampleValueSint32(lt_uint16 band) const;
00321
00331 float getSampleValueFloat32(lt_uint16 band) const;
00332
00342 double getSampleValueFloat64(lt_uint16 band) const;
00343 #endif
00344
00350 bool areSampleValuesMin() const;
00351
00357 bool areSampleValuesMax() const;
00358
00359
00366
00372 void setSampleValuesToMin();
00373
00379 void setSampleValuesToMax();
00380
00381 #ifndef DEPRECATE_PIXEL_HELPERS
00382
00390 void setSampleValueAddr(lt_uint16 band, const void* data) const;
00391
00400 void setSampleValuesUint8(lt_uint8 value);
00401
00410 void setSampleValuesSint8(lt_int8 value);
00411
00420 void setSampleValuesUint16(lt_uint16 value);
00421
00430 void setSampleValuesSint16(lt_int16 value);
00431
00440 void setSampleValuesUint32(lt_uint32 value);
00441
00450 void setSampleValuesSint32(lt_int32 value);
00451
00460 void setSampleValuesFloat32(float value);
00461
00470 void setSampleValuesFloat64(double value);
00471 #endif
00472
00479 void setSampleValuesFromDouble(double value);
00480
00481 #ifndef DEPRECATE_PIXEL_HELPERS
00482
00491 void setSampleValueUint8(lt_uint16 band, lt_uint8 value);
00492
00502 void setSampleValueSint8(lt_uint16 band, lt_int8 value);
00503
00513 void setSampleValueUint16(lt_uint16 band, lt_uint16 value);
00514
00524 void setSampleValueSint16(lt_uint16 band, lt_int16 value);
00525
00535 void setSampleValueUint32(lt_uint16 band, lt_uint32 value);
00536
00546 void setSampleValueSint32(lt_uint16 band, lt_int32 value);
00547
00557 void setSampleValueFloat32(lt_uint16 band, float value);
00558
00568 void setSampleValueFloat64(lt_uint16 band, double value);
00569
00578 void setSampleValuesUint8(const lt_uint8 values[]);
00579
00588 void setSampleValuesSint8(const lt_int8 values[]);
00589
00598 void setSampleValuesUint16(const lt_uint16 values[]);
00599
00608 void setSampleValuesSint16(const lt_int16 values[]);
00609
00618 void setSampleValuesUint32(const lt_uint32 values[]);
00619
00628 void setSampleValuesSint32(const lt_int32 values[]);
00629
00638 void setSampleValuesFloat32(const float values[]);
00639
00648 void setSampleValuesFloat64(const double values[]);
00650 #endif
00651
00652 LT_STATUS getBandSelection(lt_uint16 *&bandSelection) const;
00662 static LT_STATUS checkCompatible(const LTIPixel &dstPixelProps,
00663 const LTIPixel &srcPixelProps);
00664
00665 private:
00666 void createSamples(LTIDataType dt, lt_uint16 numSamples);
00667
00668 void copySamples(const LTISample *samples, lt_uint16 numSamples,
00669 const lt_uint16 *bandSelection, lt_uint16 numBands);
00670
00671 LTISample* m_samples;
00672 lt_uint16 m_numBands;
00673 LTIColorSpace m_colorSpace;
00674 };
00675
00676
00677 LT_END_NAMESPACE(LizardTech)
00678
00679
00680 #endif // LTI_PIXEL_H