gpt4 book ai didi

c++ - 吉尔提升 : convert rgb8_image_t to rgba8_image_t

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:55 24 4
gpt4 key购买 nike

我对 GIL 语法有点困惑。我要转换

rgb8_image_t

rgba8_image_t

并将 alpha channel 设置为 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 图像在转换时具有隐式最大 alpha 这样没有争议的事情,似乎是没有理由不在默认情况下将其拾取的位置定义它。

关于c++ - 吉尔提升 : convert rgb8_image_t to rgba8_image_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8968774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com