1 #ifndef GUI_IMAGE___IMAGE_READER__HPP
2 #define GUI_IMAGE___IMAGE_READER__HPP
3 
4 /*  $Id: image_io.hpp 103491 2007-05-04 17:18:18Z kazimird $
5  * ===========================================================================
6  *
7  *                            PUBLIC DOMAIN NOTICE
8  *               National Center for Biotechnology Information
9  *
10  *  This software/database is a "United States Government Work" under the
11  *  terms of the United States Copyright Act.  It was written as part of
12  *  the author's official duties as a United States Government employee and
13  *  thus cannot be copyrighted.  This software/database is freely available
14  *  to the public for use. The National Library of Medicine and the U.S.
15  *  Government have not placed any restriction on its use or reproduction.
16  *
17  *  Although all reasonable efforts have been taken to ensure the accuracy
18  *  and reliability of the software and data, the NLM and the U.S.
19  *  Government do not and cannot warrant the performance or results that
20  *  may be obtained by using this software or data. The NLM and the U.S.
21  *  Government disclaim all warranties, express or implied, including
22  *  warranties of performance, merchantability or fitness for any particular
23  *  purpose.
24  *
25  *  Please cite the author in any work or product based on this material.
26  *
27  * ===========================================================================
28  *
29  * Authors:  Mike DiCuccio
30  *
31  * File Description:
32  *    CImageIO -- framework for reading/writing images
33  */
34 
35 
36 #include <corelib/ncbistd.hpp>
37 #include <util/image/image.hpp>
38 
39 
40 BEGIN_NCBI_SCOPE
41 
42 class CImageIOHandler;
43 
44 
45 //
46 // class CImageIO defines a static interface for reading and writing images
47 // from files.
48 //
49 // This class is a front end to a variety of format-specific readers and
50 // writers, and supported importing and exporing images in JPEG, PNG, GIF, BMP,
51 // SGI, and TIFF formats.  In addition, this class supports importing and
52 // exporting sub-regions of images.
53 //
54 
55 class NCBI_XIMAGE_EXPORT CImageIO
56 {
57 public:
58 
59     // enumerated list of recognized image types
60     enum EType {
61         eUnknown,
62         eBmp,
63         eGif,
64         eJpeg,
65         ePng,
66         eSgi,
67         eTiff,
68         eXpm,
69         eRaw
70     };
71 
72     // enumerated list of compression grades
73     enum ECompress {
74         eCompress_None,
75         eCompress_Low,
76         eCompress_Medium,
77         eCompress_High,
78 
79         eCompress_Min     = eCompress_None,
80         eCompress_Max     = eCompress_High,
81         eCompress_Default = eCompress_Medium
82     };
83 
84     // retrieve an image type from its magic number
85     static EType GetTypeFromMagic(CNcbiIstream& istr);
86     static EType GetTypeFromMagic(const string& file);
87 
88     // retrieve an image type from its file name
89     // this uses the provided extension as a hint to guess the expected file
90     // type
91     static EType GetTypeFromFileName(const string& file);
92 
93     // read an image from a file, returning the object for user management
94     static CImage* ReadImage(const string& file,
95                              EType type = CImageIO::eUnknown);
96     static CImage* ReadImage(CNcbiIstream& istr,
97                              EType type = CImageIO::eUnknown);
98 
99     static bool ReadImageInfo(const string& file,
100                               size_t* width, size_t* height, size_t* depth,
101                               EType* type);
102     static bool ReadImageInfo(CNcbiIstream& istr,
103                               size_t* width, size_t* height, size_t* depth,
104                               EType* type);
105 
106     // read only part of an image from a file
107     static CImage* ReadSubImage(CNcbiIstream& istr,
108                                 size_t x, size_t y, size_t w, size_t h,
109                                 EType type = CImageIO::eUnknown);
110     static CImage* ReadSubImage(const string& file,
111                                 size_t x, size_t y, size_t w, size_t h,
112                                 EType type = CImageIO::eUnknown);
113 
114     // write an image to a file in a specified format.  If the format type is
115     // eUnknown, it will be guessed from the file extension.
116     static bool WriteImage(const CImage& image, CNcbiOstream& ostr,
117                            EType type,
118                            ECompress compress = eCompress_Default);
119     static bool WriteImage(const CImage& image, const string& file,
120                            EType type = eUnknown,
121                            ECompress compress = eCompress_Default);
122 
123     // write only part of an image to a file
124     static bool WriteSubImage(const CImage& image, CNcbiOstream& ostr,
125                               size_t x, size_t y, size_t w, size_t h,
126                               EType type,
127                               ECompress compress = eCompress_Default);
128     static bool WriteSubImage(const CImage& image, const string& file,
129                               size_t x, size_t y, size_t w, size_t h,
130                               EType type = eUnknown,
131                               ECompress compress = eCompress_Default);
132 
133 private:
134 
135     // retrieve an image I/O handler for a given type
136     static CImageIOHandler* x_GetHandler(EType type);
137 };
138 
139 
140 END_NCBI_SCOPE
141 
142 #endif  // GUI_IMAGE___IMAGE_READER__HPP
143