jpeg_io.hpp

Go to the documentation of this file.
00001 /*
00002     Copyright 2005-2007 Adobe Systems Incorporated
00003    
00004     Use, modification and distribution are subject to the Boost Software License,
00005     Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
00006     http://www.boost.org/LICENSE_1_0.txt).
00007 
00008     See http://opensource.adobe.com/gil for most recent version including documentation.
00009 */
00010 
00011 /*************************************************************************************************/
00012 
00013 #ifndef GIL_JPEG_IO_H
00014 #define GIL_JPEG_IO_H
00015 
00022 
00023 #include <cstdio>
00024 #include <algorithm>
00025 #include <string>
00026 #include <boost/static_assert.hpp>
00027 #include <boost/shared_ptr.hpp>
00028 extern "C" {
00029 #include <jpeglib.h>
00030 }
00031 #include "io_error.hpp"
00032 #include "jpeg_io_private.hpp"
00033 
00034 namespace boost { namespace gil {
00035 
00038 template <typename View>
00039 struct jpeg_read_support {
00040     BOOST_STATIC_CONSTANT(bool,is_supported=
00041                           (detail::jpeg_read_support_private<typename channel_type<View>::type,
00042                                                              typename color_space_type<View>::type>::is_supported));
00043     BOOST_STATIC_CONSTANT(J_COLOR_SPACE,color_type=
00044                           (detail::jpeg_read_support_private<typename channel_type<View>::type,
00045                                                              typename color_space_type<View>::type>::color_type));
00046     BOOST_STATIC_CONSTANT(bool, value=is_supported);
00047 };
00048 
00052 inline point2<std::ptrdiff_t> jpeg_read_dimensions(const char* filename) {
00053     detail::jpeg_reader m(filename);
00054     return m.get_dimensions();
00055 }
00056 
00060 inline point2<std::ptrdiff_t> jpeg_read_dimensions(const std::string& filename) {
00061     return jpeg_read_dimensions(filename.c_str());
00062 }
00063 
00069 template <typename View>
00070 inline void jpeg_read_view(const char* filename,const View& view) {
00071     BOOST_STATIC_ASSERT(jpeg_read_support<View>::is_supported);
00072 
00073     detail::jpeg_reader m(filename);
00074     m.apply(view);
00075 }
00076 
00079 template <typename View>
00080 inline void jpeg_read_view(const std::string& filename,const View& view) {
00081     jpeg_read_view(filename.c_str(),view);
00082 }
00083 
00089 template <typename Image>
00090 inline void jpeg_read_image(const char* filename,Image& im) {
00091     BOOST_STATIC_ASSERT(jpeg_read_support<typename Image::view_t>::is_supported);
00092 
00093     detail::jpeg_reader m(filename);
00094     m.read_image(im);
00095 }
00096 
00099 template <typename Image>
00100 inline void jpeg_read_image(const std::string& filename,Image& im) {
00101     jpeg_read_image(filename.c_str(),im);
00102 }
00103 
00107 template <typename View,typename CC>
00108 inline void jpeg_read_and_convert_view(const char* filename,const View& view,CC cc) {
00109     detail::jpeg_reader_color_convert<CC> m(filename,cc);
00110     m.apply(view);
00111 }
00112 
00116 template <typename View>
00117 inline void jpeg_read_and_convert_view(const char* filename,const View& view) {
00118     detail::jpeg_reader_color_convert<default_color_converter> m(filename,default_color_converter());
00119     m.apply(view);
00120 }
00121 
00124 template <typename View,typename CC>
00125 inline void jpeg_read_and_convert_view(const std::string& filename,const View& view,CC cc) {
00126     jpeg_read_and_convert_view(filename.c_str(),view);
00127 }
00128 
00131 template <typename View>
00132 inline void jpeg_read_and_convert_view(const std::string& filename,const View& view) {
00133     jpeg_read_and_convert_view(filename.c_str(),view);
00134 }
00135 
00139 template <typename Image,typename CC>
00140 inline void jpeg_read_and_convert_image(const char* filename,Image& im,CC cc) {
00141     detail::jpeg_reader_color_convert<CC> m(filename,cc);
00142     m.read_image(im);
00143 }
00144 
00148 template <typename Image>
00149 inline void jpeg_read_and_convert_image(const char* filename,Image& im) {
00150     detail::jpeg_reader_color_convert<default_color_converter> m(filename,default_color_converter());
00151     m.read_image(im);
00152 }
00153 
00156 template <typename Image,typename CC>
00157 inline void jpeg_read_and_convert_image(const std::string& filename,Image& im,CC cc) {
00158     jpeg_read_and_convert_image(filename.c_str(),im);
00159 }
00160 
00163 template <typename Image>
00164 inline void jpeg_read_and_convert_image(const std::string& filename,Image& im) {
00165     jpeg_read_and_convert_image(filename.c_str(),im);
00166 }
00167 
00170 template <typename View>
00171 struct jpeg_write_support {
00172     BOOST_STATIC_CONSTANT(bool,is_supported=
00173                           (detail::jpeg_write_support_private<typename channel_type<View>::type,
00174                                                               typename color_space_type<View>::type>::is_supported));
00175     BOOST_STATIC_CONSTANT(J_COLOR_SPACE,color_type=
00176                           (detail::jpeg_write_support_private<typename channel_type<View>::type,
00177                                                              typename color_space_type<View>::type>::color_type));
00178     BOOST_STATIC_CONSTANT(bool, value=is_supported);
00179 };
00180 
00185 template <typename View>
00186 inline void jpeg_write_view(const char* filename,const View& view,int quality=100) {
00187     BOOST_STATIC_ASSERT(jpeg_write_support<View>::is_supported);
00188 
00189     detail::jpeg_writer m(filename);
00190     m.apply(view,quality);
00191 }
00192 
00195 template <typename View>
00196 inline void jpeg_write_view(const std::string& filename,const View& view,int quality=100) {
00197     jpeg_write_view(filename.c_str(),view,quality);
00198 }
00199 
00200 } }  // namespace boost::gil
00201 
00202 #endif

Generated on Sat May 2 13:50:14 2009 for Generic Image Library by  doxygen 1.5.6