3
GILの構文についてちょっと混乱します。私は、任意の組み込み関数はありgil boost:rgb8_image_tをrgba8_image_tに変換してください
rgba8_image_t
に
rgb8_image_t
を変換し、1 にアルファチャンネルを設定します。手動でこれを行う方法ではない場合は?
GILの構文についてちょっと混乱します。私は、任意の組み込み関数はありgil boost:rgb8_image_tをrgba8_image_tに変換してください
rgba8_image_t
に
rgb8_image_t
を変換し、1 にアルファチャンネルを設定します。手動でこれを行う方法ではない場合は?
boost::gil::copy_and_convert_pixels
を適切なマッチングcolor_convert
の有効範囲で使用したいと考えています。ここで
は完全な例です:
#include <boost/gil/gil_all.hpp>
#include <cassert>
namespace boost { namespace gil {
// Define a color conversion rule NB in the boost::gil namespace
template <> void color_convert<rgb8_pixel_t,rgba8_pixel_t>(
const rgb8_pixel_t& src,
rgba8_pixel_t& dst
) {
// Well we _could_ just write...
// dst[0]=src[0];
// dst[1]=src[1];
// dst[2]=src[2];
// dst[3]=255;
// ...but that'd be too easy/not as generic as it could be
// so let's go crazy...
get_color(dst,red_t())=get_color(src,red_t());
get_color(dst,green_t())=get_color(src,green_t());
get_color(dst,blue_t())=get_color(src,blue_t());
typedef color_element_type<rgba8_pixel_t,alpha_t>::type alpha_channel_t;
get_color(dst,alpha_t())=channel_traits<alpha_channel_t>::max_value();
}
}
}
int main(int,char**) {
// Create a 1x1 RGB image and set its pixel to a color
boost::gil::rgb8_image_t a(1,1);
boost::gil::view(a)(0,0)=boost::gil::rgb8_pixel_t(1,2,3);
// Create a 1x1 RGBA
boost::gil::rgba8_image_t b(1,1);
// Copy AND CONVERT
boost::gil::copy_and_convert_pixels(
boost::gil::const_view(a),
boost::gil::view(b)
);
// Check the alpha has been set as expected
const boost::gil::rgba8_pixel_t p=boost::gil::const_view(b)(0,0);
assert(p==boost::gil::rgba8_pixel_t(1,2,3,255));
return 0;
}
はまたそこに明確な色変換ファンクタを受け入れるcopy_and_convert_pixels
オーバーロード(docsを参照)があるが、RGB画像を作るほどの異論何かを変換上の暗黙の最大アルファを持っていますそれがデフォルトで選択される場所を定義しない理由はほとんどないようです。