2010-12-04 18 views
1

gil::color_converted_viewへの書き込みは、基になるビューのデータに影響しないことに気付きました。それが正しいのだろうか?boost :: gil :: color_converted_viewとboost :: gil :: for_each_pixelの使用

たとえば、赤いチャンネルの値を取り、青いチャンネルの値をその半分に設定するプログラムを作成したいとします。

template <typename SrcView> 
void half_red_to_blue(SrcView & view) 
{ 
    // Since SrcView might be RGB or BGR or some other types, 
    // I decided to use a color_converted_view to ensure that I'm 
    // accessing the correct channels 
    typedef gil::color_converted_view_type<SrcView, gil::rgb8_pixel_t>::type MyView; 
    MyView my_view = gil::color_converted_view<gil::rgb8_pixel_t>(view): 
    struct my_lambda 
    { 
     void operator()(gil::rgb8_pixel_t & p) 
     { 
      p[2] = p[0]/2; 
     } 
    }; 
    gil::for_each_pixel(my_view, my_lambda()); 
} 

SrcViewが実際にgil::rgb8_view_tときしかし、それだけで動作します:ここに私の失敗した試みです。私が電話すると、例えば。 half_red_to_blue<gil::bgr8_view_t>(view)、ビューはまったく変更されません!私はデバッガで少し調べて、書き込み操作は元のピクセルの代わりに何らかの種類のプロキシの場所に書き込んでいるようです。

アイデア?前もって感謝します!

答えて

0

これは、Boost.GILで有効な動作です。これは、ピクセルの色成分には、ピクセルにアクセスしたときにのみ表示されるためです。 my_lambda :: operator()を変更して、get_colorを使用してカラーコンポーネントへのアクセスをトリガーすることができます。

関連する問題