summaryrefslogtreecommitdiffstats
path: root/conversion/tiff.hh
blob: daf1f99362252d1ca6afcde070b8e6b8b27f9a80 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*
* This file is part of rasdaman community.
*
* Rasdaman community is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Rasdaman community is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with rasdaman community.  If not, see <http://www.gnu.org/licenses/>.
*
* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
rasdaman GmbH.
*
* For more information please see <http://www.rasdaman.org>
* or contact Peter Baumann via <baumann@rasdaman.com>.
*/
/**
 * INCLUDE: tiff.hh
 *
 * MODULE:  conversion
 *
 * PURPOSE:
 * Provides interface to convert data between TIFF and internal format.
 * The convertFrom() and convertTo() methods accept a null-terminated 
 * option string of the following syntax:
 * 	optionString ::= ( option )*
 *	option       ::= "comptype=" string
 *                       "quality=" int
 *                       "bpp=" int
 *                       "bps=" int
 *                       "depth=" int
 *
 * CLASSES: r_Conv_TIFF
 *
 * COMMENTS:
 *
*/

#ifndef _R_CONV_TIFF_HH_
#define _R_CONV_TIFF_HH_

#include "conversion/convertor.hh"



//@ManMemo: Module {\bf conversion}

/*@Doc:
  TIFF convertor class.

  Supported parameters are

  \begin{tabular}{lcl}
  {\tt comptype} && string && compression type (see below)\\
  {\tt quality} && int && quality parameter (JPEG)\\
  {\tt bpp} && int && override number of bits per p (if not set in the tiff)\\
  {\tt bps} && int && override number of bits per s (if not set in the tiff)\\
  {\tt depth} && int && override number of colors in the mdd\\
  \end{tabular}

  The compression type defaults to lzw, but it may be one of the
  following (but not all types may be supported by the version of
  the TIFF library; note also that some compression types are only
  valid for specific colour depths):

  \begin{tabular}{ll}
  {\tt none}\\
  {\tt ccittrle}\\
  {\tt ccittfax3}\\
  {\tt ccittfax4}\\
  {\tt lzw}\\
  {\tt ojpeg}\\
  {\tt jpeg}\\
  {\tt next}\\
  {\tt ccittrlew}\\
  {\tt packbits}\\
  {\tt thunderscan}\\
  {\tt pixarfilm}\\
  {\tt pixarlog}\\
  {\tt deflate}\\
  {\tt dcs}\\
  {\tt jbig}\\
  {\tt sgilog} && Not Linux\\
  {\tt sgilog24} && Not Linux\\
  {\tt it8ctpad} && Not Linux\\
  {\tt it8lw} && Not Linux\\
  {\tt it8mp} && Not Linux\\
  {\tt it8bl} && Not Linux\\
  \end{tabular}

  For more information refer to the TIFFlib manual pages.
 */

class r_Conv_TIFF : public r_Convert_Memory
{
  public:
  /// constructor using an r_Type object
  r_Conv_TIFF( const char *src, const r_Minterval &interv, const r_Type *tp ) throw(r_Error);
  /// constructor using convert_type_e shortcut
  r_Conv_TIFF( const char *src, const r_Minterval &interv, int type ) throw(r_Error);
  /// destructor
  ~r_Conv_TIFF( void );

  /// convert to TIFF
  virtual r_convDesc &convertTo( const char *options=NULL) throw(r_Error);
  /// convert from TIFF
  virtual r_convDesc &convertFrom( const char *options=NULL ) throw(r_Error);
  /// cloning
  virtual r_Convertor *clone( void ) const;
  /// identification
  virtual const char *get_name( void ) const;
  virtual r_Data_Format get_data_format( void ) const;

  /// translate string compression type to libtiff compression type
  static int get_compression_from_name(const char* strComp);
  
  /// translate string resolution unit type to libtiff resolution unit type
  static int get_resunit_from_name(const char* strComp);  

  private:
  /// init TIFF class
  void initTIFF( void );
  /// parameters
  char *compType;
  int quality;
  int override_bpp;
  int override_bps;
  int override_depth;
  /// connection between string compression type and libtiff compression type
  static const convert_string_t compNames[];
  /// connection between string resolution unit type and libtiff resolution unit type
  static const convert_string_t resunitNames[];
  /// default rows per strip (32)
  static const int defaultRPS;
  /// temporary dummy file
  static const char dummyFileFmt[];

  /// default quality factor (0..100) for lossy compression
  static const unsigned int TIFF_DEFAULT_QUALITY;

};

#endif