00001 #if !defined(QTPCCOLORTABLE_H)
00002 #define QTPCCOLORTABLE_H
00003
00004 #include <vector>
00005
00006 #include <casa/aips.h>
00007
00008 #include <casa/Arrays/Vector.h>
00009 #include <casa/Arrays/Matrix.h>
00010 #include <display/Display/DisplayEnums.h>
00011 #include <display/Display/PixelCanvasColorTable.h>
00012 #include <casa/BasicMath/Math.h>
00013
00014 #include <graphics/X11/X_enter.h>
00015 #include <QtGui/QImage>
00016 #include <QtGui/QColor>
00017 #include <graphics/X11/X_exit.h>
00018
00019 namespace casa {
00020
00021 class QtPCColorTable : public PixelCanvasColorTable {
00022
00023 public:
00024
00025 QtPCColorTable();
00026 virtual ~QtPCColorTable() { }
00027
00028
00029
00030
00031 virtual Bool staticSize() {
00032 return True;
00033 }
00034
00035 virtual Bool resize(uInt , uInt , uInt ) {
00036 return False;
00037 }
00038
00039 virtual void nColors(uInt &n1, uInt &n2, uInt &n3) const {
00040 n1 = 256;
00041 n2 = 256;
00042 n3 = 256;
00043 }
00044
00045 virtual uInt depth() const {
00046 return 32;
00047 }
00048
00049
00050
00051
00052
00053 virtual Display::ColorModel colorModel() const {
00054 return Display::Index;
00055 }
00056
00057
00058 # define MAX_QTPCCT_SIZE 5000u
00059
00060
00061
00062
00063 # define INITIAL_QTPCCT_SIZE 256u
00064
00065
00066 virtual uInt nColors() const {
00067 return size_;
00068 }
00069
00070
00071
00072 virtual uInt nSpareColors() const {
00073 return MAX_QTPCCT_SIZE - size_;
00074 }
00075
00076 virtual Bool resize(uInt newSize);
00077
00078
00079
00080 virtual Bool installRGBColors(const Vector<Float> & r,
00081 const Vector<Float> & g,
00082 const Vector<Float> & b,
00083 const Vector<Float> & alpha,
00084 uInt offset = 0);
00085
00086
00087
00088
00089 virtual void mapToColor(const Colormap * map,
00090 Array<uInt> & outArray,
00091 const Array<uInt> & inArray,
00092 Bool rangeCheck = True) const;
00093
00094
00095
00096
00097 virtual void mapToColor3(Array<uLong> & ,
00098 const Array<uInt> & ,
00099 const Array<uInt> & ,
00100 const Array<uInt> & ) { }
00101
00102
00103
00104 virtual void mapToColor(const Colormap * ,
00105 Array<uChar> & ,
00106 const Array<uChar> & ,
00107 Bool = True) const { }
00108
00109 virtual void mapToColor(const Colormap * ,
00110 Array<uShort> & ,
00111 const Array<uShort> & ,
00112 Bool = True) const { }
00113
00114 virtual void mapToColor(const Colormap * ,
00115 Array<uLong> & ,
00116 const Array<uLong> & ,
00117 Bool = True) const { }
00118
00119 virtual void mapToColor(const Colormap * ,
00120 Array<uChar> & ,
00121 Bool = True) const { }
00122
00123 virtual void mapToColor(const Colormap * ,
00124 Array<uShort> & ,
00125 Bool = True) const { }
00126
00127 virtual void mapToColor(const Colormap * ,
00128 Array<uInt> & ,
00129 Bool = True) const { }
00130
00131 virtual void mapToColor(const Colormap * ,
00132 Array<uLong> & ,
00133 Bool = True) const { }
00134
00135 virtual void mapToColor3(Array<uLong> & ,
00136 const Array<Float> & ,
00137 const Array<Float> & ,
00138 const Array<Float> & ) { }
00139 virtual void mapToColor3(Array<uLong> & ,
00140 const Array<Double> & ,
00141 const Array<Double> & ,
00142 const Array<Double> & ) { }
00143
00144 virtual void mapToColor3(Array<uLong> & ,
00145 const Array<uShort> & ,
00146 const Array<uShort> & ,
00147 const Array<uShort> & ) { }
00148
00149 virtual Bool colorSpaceMap(Display::ColorModel,
00150 const Array<Float> & ,
00151 const Array<Float> & ,
00152 const Array<Float> & ,
00153 Array<Float> & ,
00154 Array<Float> & ,
00155 Array<Float> & ) {
00156 return False;
00157 }
00158
00159
00160
00161 protected:
00162
00163 Int clrByte(Float f) {
00164 return Int(min( max(0.f,f)*256.f, 255.f ));
00165 }
00166
00167
00168
00169 private:
00170
00171 Vector<uInt> maps_;
00172
00173 uInt size_;
00174
00175
00176
00177
00178 };
00179
00180
00181 }
00182 #endif