$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r64134 - sandbox/gil/boost/gil/extension/io2
From: dsaritz_at_[hidden]
Date: 2010-07-18 12:35:35
Author: psiha
Date: 2010-07-18 12:35:35 EDT (Sun, 18 Jul 2010)
New Revision: 64134
URL: http://svn.boost.org/trac/boost/changeset/64134
Log:
Fixed/better handled GDI+ v 1.1 vs 1.0 CMYK handling differences.
Fixed the gp_image::generic_convert_to_prepared_view<>() member function.
Added the builtin_conversion static constant to LibJPEG and GDI+ backend traits.
Text files modified: 
   sandbox/gil/boost/gil/extension/io2/gp_private_base.hpp      |    50 ++++++++++++++++++--------------------- 
   sandbox/gil/boost/gil/extension/io2/libjpeg_private_base.hpp |     2 +                                       
   2 files changed, 25 insertions(+), 27 deletions(-)
Modified: sandbox/gil/boost/gil/extension/io2/gp_private_base.hpp
==============================================================================
--- sandbox/gil/boost/gil/extension/io2/gp_private_base.hpp	(original)
+++ sandbox/gil/boost/gil/extension/io2/gp_private_base.hpp	2010-07-18 12:35:35 EDT (Sun, 18 Jul 2010)
@@ -44,20 +44,12 @@
 {
 //------------------------------------------------------------------------------
 
-#if (GDIPVER >= 0x0110)
-Gdiplus::PixelFormat const cmyk_format( PixelFormat32bppCMYK | PixelFormatGDI );
-#undef PixelFormat32bppCMYK
-#define PixelFormat32bppCMYK cmyk_format
-#else
-#undef PixelFormat32bppCMYK
-#endif // (GDIPVER >= 0x0110)
-
 template <Gdiplus::PixelFormat gp_format> struct is_canonical            : mpl::bool_ <(gp_format & PixelFormatCanonical) != 0> {};
 template <Gdiplus::PixelFormat gp_format> struct is_extended             : mpl::bool_ <(gp_format & PixelFormatExtended ) != 0> {};
 template <Gdiplus::PixelFormat gp_format> struct is_indexed              : mpl::bool_ <(gp_format & PixelFormatIndexed  ) != 0> {};
-template <Gdiplus::PixelFormat gp_format> struct is_supported            : mpl::bool_ <(gp_format & PixelFormatGDI      ) != 0> {};
 template <Gdiplus::PixelFormat gp_format> struct has_alpha               : mpl::bool_ <(gp_format & PixelFormatAlpha    ) != 0> {};
 template <Gdiplus::PixelFormat gp_format> struct has_premultiplied_alpha : mpl::bool_ <(gp_format & PixelFormatPAlpha   ) != 0> {};
+template <Gdiplus::PixelFormat gp_format> struct is_supported            : mpl::bool_ <(gp_format & PixelFormatGDI      ) != 0 || ( ( gp_format == PixelFormat32bppCMYK ) && ( GDIPVER >= 0x0110 ) )> {};
 template <Gdiplus::PixelFormat gp_format> struct pixel_size              : mpl::size_t<( gp_format >> 8 ) & 0xff              > {};
 
 
@@ -254,12 +246,12 @@
         template <typename View>
         void set_bitmapdata_for_view( View const & view )
         {
-            Width    = view.width();
-            Height   = view.height();
-            Stride   = view.pixels().row_size();
-            PixelFormat   = view_gp_format::apply<View>::value;
-            Scan0    = formatted_image_base::get_raw_data( view );
-            Reserved = 0;
+            Width       = view.width();
+            Height      = view.height();
+            Stride      = view.pixels().row_size();
+            PixelFormat = view_gp_format::apply<View>::value;
+            Scan0       = formatted_image_base::get_raw_data( view );
+            Reserved    = 0;
         }
 
         void operator=( view_data_t const & );
@@ -268,7 +260,8 @@
         aligned_storage<sizeof( gp_roi ), alignment_of<gp_roi>::value>::type optional_roi_;
     };
 
-    BOOST_STATIC_CONSTANT( unsigned int, desired_alignment = sizeof( Gdiplus::ARGB ) );
+    BOOST_STATIC_CONSTANT( unsigned int, desired_alignment  = sizeof( Gdiplus::ARGB ) );
+    BOOST_STATIC_CONSTANT( bool        , builtin_conversion = true                    );
 };
 
 
@@ -422,11 +415,13 @@
                 return
                     PixelFormat16bppRGB565;
 
-            #if (GDIPVER >= 0x0110)
-            case PixelFormat32bppCMYK     :
+            case PixelFormat32bppCMYK:
                 return
+                #if (GDIPVER >= 0x0110)
                     PixelFormat32bppCMYK;
-            #endif // (GDIPVER >= 0x0110)
+                #else
+                    PixelFormat24bppRGB;
+                #endif // (GDIPVER >= 0x0110)
 
             default:
                 BOOST_ASSERT( !"Should not get reached." ); __assume( false );
@@ -446,10 +441,9 @@
         {
             case PixelFormat24bppRGB      : return 0;
             case PixelFormat32bppARGB     : return 1;
-            case PixelFormat16bppGrayScale: return 2;
-            case PixelFormat16bppRGB565   : return 3;
+            case PixelFormat16bppRGB565   : return 2;
             #if (GDIPVER >= 0x0110)
-            case PixelFormat32bppCMYK     : return 4;
+            case PixelFormat32bppCMYK     : return 3;
             #endif
 
             default:
@@ -466,21 +460,22 @@
         //BOOST_ASSERT( !formats_mismatch   ( view ) );
 
         using namespace Gdiplus;
+        point2<std::ptrdiff_t> const & targetDimensions( original_view( view ).dimensions() );
+        gp_roi const roi( get_offset<gp_roi::offset_t>( view ), targetDimensions.x, targetDimensions.y );
         BitmapData bitmapData;
-        Rect const rect( 0, 0, bitmapData.Width, bitmapData.Height );
         ensure_result
         (
             DllExports::GdipBitmapLockBits
             (
                 pBitmap_,
-                &rect,
+                &roi,
                 ImageLockModeRead,
                 view_gp_format::apply<MyView>::value,
                 &bitmapData
             )
         );
-        assert( !"converter" );
-        copy_pixels // This must not throw!
+        BOOST_ASSERT( bitmapData.PixelFormat == view_gp_format::apply<MyView>::value );
+        copy_and_convert_pixels // This must not throw!
         (
             interleaved_view
             (
@@ -489,7 +484,8 @@
                 gil_reinterpret_cast_c<typename MyView::value_type const *>( bitmapData.Scan0 ),
                 bitmapData.Stride
             ),
-            view
+            view,
+            converter
         );
         verify_result( DllExports::GdipBitmapUnlockBits( pBitmap_, &bitmapData ) );
     }
Modified: sandbox/gil/boost/gil/extension/io2/libjpeg_private_base.hpp
==============================================================================
--- sandbox/gil/boost/gil/extension/io2/libjpeg_private_base.hpp	(original)
+++ sandbox/gil/boost/gil/extension/io2/libjpeg_private_base.hpp	2010-07-18 12:35:35 EDT (Sun, 18 Jul 2010)
@@ -228,6 +228,8 @@
     struct is_supported : mpl::bool_<view_libjpeg_format::apply<View>::value != JCS_UNKNOWN> {};
 
     BOOST_STATIC_CONSTANT( unsigned int, desired_alignment = sizeof( void * ) );
+
+    BOOST_STATIC_CONSTANT( bool, builtin_conversion = true );
 };