00001 #ifndef __TIFF_H__
00002 #define __TIFF_H__
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
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 #include <stddef.h>
00079 #include <assert.h>
00080
00081
00082 #ifdef __cplusplus
00083 extern "C"{
00084 #endif
00085
00086
00087
00088
00089
00090
00091 typedef signed char tiffint8;
00092 typedef unsigned char tiffuint8;
00093 typedef signed short tiffint16;
00094 typedef unsigned short tiffuint16;
00095 typedef signed int tiffint32;
00096 typedef unsigned int tiffuint32;
00097
00098
00099 #define TIFF_COMPILE_TIME_SIZE_CHECK( type, size )\
00100 extern unsigned char _tiff_compile_time_size_check[ ( ( size ) == sizeof( type ) ) ? 1 : -1 ]
00101
00102
00103 TIFF_COMPILE_TIME_SIZE_CHECK( tiffint8, 1 );
00104 TIFF_COMPILE_TIME_SIZE_CHECK( tiffuint8, 1 );
00105 TIFF_COMPILE_TIME_SIZE_CHECK( tiffint16, 2 );
00106 TIFF_COMPILE_TIME_SIZE_CHECK( tiffuint16, 2 );
00107 TIFF_COMPILE_TIME_SIZE_CHECK( tiffint32, 4 );
00108 TIFF_COMPILE_TIME_SIZE_CHECK( tiffuint32, 4 );
00109
00110
00111
00112 #define TIFF_TYPE_USHORT_SIZE 2
00113 #define TIFF_TYPE_ULONG_SIZE 4
00114
00115 TIFF_COMPILE_TIME_SIZE_CHECK( tiffint16, TIFF_TYPE_USHORT_SIZE );
00116 TIFF_COMPILE_TIME_SIZE_CHECK( tiffuint16, TIFF_TYPE_USHORT_SIZE );
00117 TIFF_COMPILE_TIME_SIZE_CHECK( tiffint32, TIFF_TYPE_ULONG_SIZE );
00118 TIFF_COMPILE_TIME_SIZE_CHECK( tiffuint32, TIFF_TYPE_ULONG_SIZE );
00119
00120
00121 #define TIFF_USE_VARIABLE( x ) (x)
00122
00123
00124 typedef enum
00125 {
00126 TIFF_PIXEL_UNSUPPORTED,
00127 TIFF_PIXEL_LUM8,
00128 TIFF_PIXEL_LUM12,
00129 TIFF_PIXEL_LUM16
00130 }
00131 TiffPixelType;
00132
00133
00134 #define TIFF_PIXEL_LUM_NUM_CHANNELS 1
00135
00136
00137 #define TIFF_PIXEL_LUM8_NUM_BITS 8
00138 #define TIFF_PIXEL_LUM12_NUM_BITS 12
00139 #define TIFF_PIXEL_LUM16_NUM_BITS 16
00140
00141
00142 typedef enum
00143 {
00144 TIFF_NO_ERROR,
00145 TIFF_ERROR_FILE_OPEN,
00146 TIFF_ERROR_FILE_READ,
00147 TIFF_ERROR_FILE_WRITE,
00148 TIFF_ERROR_FILE_SEEK,
00149 TIFF_ERROR_FILE_INVALID,
00150 TIFF_ERROR_VERSION,
00151 TIFF_ERROR_COMPRESSED,
00152 TIFF_ERROR_OUT_OF_MEMORY,
00153 TIFF_ERROR_UNSUPPORTED,
00154 TIFF_ERROR_PARAMETER,
00155 TIFF_ERROR_NOT_ENOUGH_SPACE
00156 }
00157 TiffErrorType;
00158
00159
00160 typedef struct _TiffRational
00161 {
00162 tiffint32 numerator;
00163 tiffint32 denominator;
00164 }
00165 TiffRational;
00166
00167
00168 typedef struct _TiffFile
00169 {
00170 size_t width;
00171 size_t height;
00172 size_t length;
00173 void *pixels;
00174 TiffPixelType pixel_type;
00175 size_t channels_per_pixel;
00176 size_t bits_per_pixel;
00177 size_t luminance_bits;
00178 size_t max_intensity;
00179 size_t red_bits;
00180 size_t green_bits;
00181 size_t blue_bits;
00182 size_t alpha_bits;
00183 const char *document_name;
00184 const char *image_description;
00185 const char *make;
00186 const char *model;
00187 const char *page_name;
00188 const char *software;
00189 const char *date_time;
00190 const char *artist;
00191 const char *host_computer;
00192 }
00193 TiffFile;
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203 TiffFile* tiff_file_new( void *user_data );
00204 void tiff_file_construct( TiffFile *tiff_file, void *user_data );
00205
00206
00207
00208
00209 void tiff_file_delete( TiffFile *tiff_file, void *user_data );
00210 void tiff_file_destruct( TiffFile *tiff_file, void *user_data );
00211
00212
00213
00214 TiffErrorType tiff_file_read_info
00215 (
00216 TiffFile *tiff_file,
00217 const char *file_name,
00218 void *user_data
00219 );
00220
00221
00222 TiffErrorType tiff_file_read
00223 (
00224 TiffFile *tiff_file,
00225 const char *file_name,
00226 int ( *cancelled )( void* ),
00227 void ( *update )( float, void* ),
00228 void *user_data
00229 );
00230
00231 TiffErrorType tiff_file_read_ex
00232 (
00233 TiffFile *tiff_file,
00234 const char *file_name,
00235 void *pixels,
00236 size_t pixels_size,
00237 int ( *cancelled )( void* ),
00238 void ( *update )( float, void* ),
00239 void *user_data
00240 );
00241
00242
00243
00244 TiffErrorType tiff_file_read_at
00245 (
00246 TiffFile *tiff_file,
00247 const char *file_name,
00248 size_t z,
00249 void *user_data
00250 );
00251
00252 TiffErrorType tiff_file_write
00253 (
00254 const TiffFile *tiff_file,
00255 const char *file_name,
00256 int ( *cancelled )( void* ),
00257 void ( *update )( float, void* ),
00258 void *user_data
00259 );
00260
00261
00262 typedef struct _TiffRegion
00263 {
00264 size_t x;
00265 size_t y;
00266 size_t z;
00267 size_t width;
00268 size_t height;
00269 size_t length;
00270 }
00271 TiffRegion;
00272
00273 TiffErrorType tiff_file_write_ex
00274 (
00275 const TiffFile *tiff_file,
00276 const TiffRegion *tiff_region,
00277 const char *file_name,
00278 int ( *cancelled )( void* ),
00279 void ( *update )( float, void* ),
00280 void *user_data
00281 );
00282
00283
00284
00285
00286
00287 extern void* ( *tiff_fopen )( const char*, const char*, void* );
00288
00289 extern int ( *tiff_fclose )( void*, void* );
00290
00291 extern size_t ( *tiff_fread )( void*, size_t, size_t, void*, void* );
00292
00293 extern size_t ( *tiff_fwrite )( const void*, size_t, size_t, void*, void* );
00294
00295 extern int ( *tiff_remove )( const char*, void* );
00296
00297 extern void* ( *tiff_malloc )( size_t, void* );
00298
00299 extern void* ( *tiff_calloc )( size_t, size_t, void* );
00300
00301 extern void ( *tiff_free )( void*, void* );
00302
00303
00304 extern void ( *tiff_print )( void*, const char*, ... );
00305
00306
00307
00308
00309
00310 extern int TIFF_SEEK_SET;
00311 extern int TIFF_SEEK_CUR;
00312 extern int TIFF_SEEK_END;
00313
00314
00315
00316
00317 extern int ( *tiff_fseek )( void*, size_t, int, int, void* );
00318
00319
00320
00321 extern int ( *tiff_ftell )( void*, size_t*, void* );
00322
00323
00324 #ifdef __cplusplus
00325 }
00326 #endif
00327
00328
00329 #endif