00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef __RGBIMAGE_H__
00033 #define __RGBIMAGE_H__
00034
00035 #include <cstdlib>
00036 #include <cstring>
00037 #include <cassert>
00038 #include <iostream>
00039 #include <cmath>
00040 #include <tiff.h>
00041 #include <tiffio.h>
00042 #include <GL/glut.h>
00043
00044 #include "alphaimage.h"
00045 #include "hybridchannel.cpp"
00046
00047 #define HAVE_BIGENDIAN (*(unsigned short *)"12" == 0x3132)
00048 #define SWAP_UINT32(x) (( ((uint32)(x)) << 24) | \
00049 ((((uint32)(x)) & 0x0000ff00UL) << 8) | \
00050 ((((uint32)(x)) & 0x00ff0000UL) >> 8) | \
00051 ( ((uint32)(x)) >> 24))
00052
00053 class RgbImage: public AlphaImage
00054 {
00055 protected:
00056 HybridRgbaChannel<unsigned char> *reddata;
00057 HybridRgbaChannel<unsigned char> *greendata;
00058 HybridRgbaChannel<unsigned char> *bluedata;
00059 Channel<unsigned char> *redfilter;
00060 Channel<unsigned char> *greenfilter;
00061 Channel<unsigned char> *bluefilter;
00062 public:
00063 RgbImage(HybridRgbaChannel<unsigned char>* red, HybridRgbaChannel<unsigned char>* green, HybridRgbaChannel<unsigned char>* blue);
00064 RgbImage(const int height, const int width);
00065 virtual ~RgbImage();
00066 double Draw();
00067 unsigned char GetLuminance(const int x, const int y);
00068 void SetLuminance(const int x, const int y, const unsigned char val);
00069 virtual unsigned char GetRed(const int x, const int y);
00070 virtual unsigned char GetGreen(const int x, const int y);
00071 virtual unsigned char GetBlue(const int x, const int y);
00072 virtual void SetRed(const int x, const int y, const unsigned char val);
00073 virtual void SetGreen(const int x, const int y, const unsigned char val);
00074 virtual void SetBlue(const int x, const int y, const unsigned char val);
00075 void RemoveLuminanceFilters();
00076 void AttachLuminanceFilter(ChannelFilter<unsigned char>* filter);
00077 virtual void RemoveRedFilters();
00078 virtual void AttachRedFilter(ChannelFilter<unsigned char>* filter);
00079 virtual void RemoveGreenFilters();
00080 virtual void AttachGreenFilter(ChannelFilter<unsigned char>* filter);
00081 virtual void RemoveBlueFilters();
00082 virtual void AttachBlueFilter(ChannelFilter<unsigned char>* filter);
00083 static RgbImage* CreateFromTiff(const char* filename);
00084 void WriteToTiff(const char* filename);
00085 };
00086
00087 #endif