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)
、ビューはまったく変更されません!私はデバッガで少し調べて、書き込み操作は元のピクセルの代わりに何らかの種類のプロキシの場所に書き込んでいるようです。
アイデア?前もって感謝します!