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
00087 LTIPixel(const LTIPixel &pixel,
00088 const lt_uint16 *bandSelection,
00089 lt_uint16 numBands,
00090 LTIColorSpace colorSpace);
00091
00092
00106 LTIPixel(const LTISample* samples,
00107 lt_uint16 numBands,
00108 LTIColorSpace colorSpace = LTI_COLORSPACE_INVALID);
00109
00113 LTIPixel(const LTIPixel&);
00114
00118 virtual ~LTIPixel();
00119
00123 LTIPixel& operator=(const LTIPixel&);
00124
00128 bool operator==(const LTIPixel&) const;
00129
00133 bool operator!=(const LTIPixel&) const;
00134
00143 lt_uint16 getNumBands() const;
00144
00153 lt_uint16 getNumBandsWithoutAlpha() const;
00154
00164 LTIDataType getDataType() const;
00165 bool isSignedData() const;
00166
00174 LTIColorSpace getColorSpace() const;
00175
00183 LTIColorSpace getColorSpaceWithoutAlpha() const;
00184
00190 bool hasAlphaBand() const;
00191
00197 bool hasPreMultipliedAlphaBand() const;
00198
00202 bool isMultiSpectral() const;
00203
00214 lt_uint32 getNumBytes() const;
00215
00226 lt_uint32 getNumBytesWithoutAlpha() const;
00227
00236 lt_uint32 getMaxBytesPerSample() const;
00237
00247 LT_STATUS checkImpedance(const LTIPixel& pixel,
00248 bool enforceColorSpace = true) const;
00249 LT_STATUS checkImpedanceWithoutAlpha(const LTIPixel& pixel) const;
00250
00251 LTISample *getSamples() const;
00252 LTISample &getSample(lt_uint16) const;
00253
00254
00255 #ifndef DEPRECATE_PIXEL_HELPERS
00256
00260
00270 const void* getSampleValueAddr(lt_uint16 band) const;
00271
00281 lt_uint8 getSampleValueUint8(lt_uint16 band) const;
00282
00292 lt_int8 getSampleValueSint8(lt_uint16 band) const;
00293
00303 lt_uint16 getSampleValueUint16(lt_uint16 band) const;
00304
00314 lt_int16 getSampleValueSint16(lt_uint16 band) const;
00315
00325 lt_uint32 getSampleValueUint32(lt_uint16 band) const;
00326
00336 lt_int32 getSampleValueSint32(lt_uint16 band) const;
00337
00347 float getSampleValueFloat32(lt_uint16 band) const;
00348
00358 double getSampleValueFloat64(lt_uint16 band) const;
00359 #endif
00360
00366 bool areSampleValuesMin() const;
00367
00373 bool areSampleValuesMax() const;
00374
00375
00382
00388 void setSampleValuesToMin();
00389
00395 void setSampleValuesToMax();
00396
00397 #ifndef DEPRECATE_PIXEL_HELPERS
00398
00406 void setSampleValueAddr(lt_uint16 band, const void* data) const;
00407
00416 void setSampleValuesUint8(lt_uint8 value);
00417
00426 void setSampleValuesSint8(lt_int8 value);
00427
00436 void setSampleValuesUint16(lt_uint16 value);
00437
00446 void setSampleValuesSint16(lt_int16 value);
00447
00456 void setSampleValuesUint32(lt_uint32 value);
00457
00466 void setSampleValuesSint32(lt_int32 value);
00467
00476 void setSampleValuesFloat32(float value);
00477
00486 void setSampleValuesFloat64(double value);
00487 #endif
00488
00495 void setSampleValuesFromDouble(double value);
00496 void setNonAlphaSampleValuesFromDouble(double value);
00497 void setSampleValuesFromPixel(const LTIPixel &src);
00498 void setNonAlphaSampleValuesFromPixel(const LTIPixel &src);
00499
00500 #ifndef DEPRECATE_PIXEL_HELPERS
00501
00510 void setSampleValueUint8(lt_uint16 band, lt_uint8 value);
00511
00521 void setSampleValueSint8(lt_uint16 band, lt_int8 value);
00522
00532 void setSampleValueUint16(lt_uint16 band, lt_uint16 value);
00533
00543 void setSampleValueSint16(lt_uint16 band, lt_int16 value);
00544
00554 void setSampleValueUint32(lt_uint16 band, lt_uint32 value);
00555
00565 void setSampleValueSint32(lt_uint16 band, lt_int32 value);
00566
00576 void setSampleValueFloat32(lt_uint16 band, float value);
00577
00587 void setSampleValueFloat64(lt_uint16 band, double value);
00588
00597 void setSampleValuesUint8(const lt_uint8 values[]);
00598
00607 void setSampleValuesSint8(const lt_int8 values[]);
00608
00617 void setSampleValuesUint16(const lt_uint16 values[]);
00618
00627 void setSampleValuesSint16(const lt_int16 values[]);
00628
00637 void setSampleValuesUint32(const lt_uint32 values[]);
00638
00647 void setSampleValuesSint32(const lt_int32 values[]);
00648
00657 void setSampleValuesFloat32(const float values[]);
00658
00667 void setSampleValuesFloat64(const double values[]);
00669 #endif
00670
00671 LT_STATUS getBandSelection(lt_uint16 *&bandSelection) const;
00681 static LT_STATUS checkCompatible(const LTIPixel &dstPixelProps,
00682 const LTIPixel &srcPixelProps);
00683
00684 private:
00685 void createSamples(LTIDataType dt, lt_uint16 numSamples);
00686
00687 void copySamples(const LTISample *samples, lt_uint16 numSamples,
00688 const lt_uint16 *bandSelection, lt_uint16 numBands);
00689
00690 LTISample* m_samples;
00691 lt_uint16 m_numBands;
00692 LTIColorSpace m_colorSpace;
00693 };
00694
00695
00696 LT_END_NAMESPACE(LizardTech)
00697
00698
00699 #endif // LTI_PIXEL_H