00001 #ifndef __TIFF_LOADER_H__ 00002 #define __TIFF_LOADER_H__ 00003 00004 #include <stdio.h> 00005 #include <stdlib.h> 00006 #include <string> 00007 #include <tiffio.h> 00008 00009 #include "loader.h" 00010 #include "utils.h" 00011 00012 class TiffLoader : public spectral::Loader 00013 { 00014 public: 00015 TiffLoader() 00016 { 00017 } 00018 virtual ~TiffLoader() 00019 { 00020 } 00021 00022 virtual spectral::Image *LoadImage(const std::string &); 00023 00024 private: 00025 bool tiff_get_size(TIFF *t, uint32_t *width, uint32_t *height); 00026 bool tiff_get_stonits(TIFF *t, double &stonits); 00027 bool tiff_get_whitepoint(TIFF *t, float *wp); 00028 bool tiff_get_primaries(TIFF *t, float *r, float *g, float *b); 00029 bool tiff_read_image_pixels(TIFF *t, spectral::Image *image); 00030 bool tiff_read_ieee_rgb(TIFF *t, uint32_t width, uint32_t height, float *buf); 00031 bool tiff_read_logluv(TIFF *t, uint32_t width, uint32_t height, float *buf); 00032 00033 void buf_transform(Matrix33 matrix, uint32_t size, float *buf); 00034 void buf_xyz_to_xyy(uint32_t size, float *buf); 00035 void buf_srgb_to_xyy(uint32_t size, float *buf); 00036 void buf_apply_stonits(float stonits, uint32_t size, float *buf); 00037 }; 00038 00039 #endif