sim*_*amt 3 c++ boost boost-gil
我有一个具有透明背景的图像,我想将其复制到另一个图像上,这两个图像都是 png 格式,我尝试使用 boost::gil::rgba8_image_t 但它仍然复制具有灰色背景的透明图像。这就是我用过的
#include <boost/gil.hpp>
#include <boost/gil/extension/io/png.hpp>
#include <boost/gil/extension/numeric/resample.hpp>
#include <boost/gil/extension/numeric/sampler.hpp>
#include <string>
namespace bg = boost::gil;
int main() {
std::string target{"./jail.png"};
std::string picture("./example_in.png");
bg::rgba8_image_t jail;
bg::rgba8_image_t temp;
bg::read_and_convert_image(target, jail, bg::png_tag{});
bg::rgba8_image_t pic(jail.dimensions());
bg::read_and_convert_image(picture, temp, bg::png_tag{});
bg::resize_view(bg::view(temp), bg::view(pic), bg::bilinear_sampler{});
bg::copy_pixels(bg::view(jail), bg::view(pic));
bg::write_view("out.png", bg::view(pic), bg::png_tag{});
}
Run Code Online (Sandbox Code Playgroud)
嗯。阅读本文,它似乎完全按照您的要求进行:
\nbg::resize_view(bg::view(temp), bg::view(pic), bg::bilinear_sampler{});\nRun Code Online (Sandbox Code Playgroud)\n这将使用输入图像的调整大小视图填充像素。新的尺寸与监狱的尺寸完全匹配。现在:
\nbg::resize_view(bg::view(temp), bg::view(pic), bg::bilinear_sampler{});\nRun Code Online (Sandbox Code Playgroud)\n将图像中的所有像素复制jail到其上。这将替换您刚刚从调整大小的输入图像中填充的任何像素。
你的输出看起来像
\n\n注意背景是如何呈方格状的。这是表示透明度的传统图案。那不是灰色的。它只是完全透明的空像素。
\n您可能想要的是保留背景像素。Boost GIL\xc2\xb9 中似乎没有高级像素操作,而是你自己写的:
\nusing Img = bg::rgba8_image_t;\nusing Pix = Img::value_type;\n\nvoid overlay_combine(Img& pic, Img const& overlay) {\n assert(pic.dimensions() == overlay.dimensions());\n bg::transform_pixels(\n view(pic), const_view(overlay), view(pic),\n [](Pix const& a, Pix const& b) {\n return get_color(b, bg::alpha_t{})? b : a;\n });\n}\nRun Code Online (Sandbox Code Playgroud)\n现在你main这样写:
int main() {\n Img jail, polar;\n bg::read_and_convert_image("./jail_PNG16.png", jail, bg::png_tag{});\n bg::read_and_convert_image("./polar.png", polar, bg::png_tag{});\n\n Img pic(jail.dimensions());\n bg::resize_view(bg::view(polar), bg::view(pic), bg::bilinear_sampler{});\n overlay_combine(pic, jail);\n\n bg::write_view("out.png", bg::view(pic), bg::png_tag{});\n}\nRun Code Online (Sandbox Code Playgroud)\n结果是:
\n\n你可以猜到我从哪里得到的polar.png:)
\xc2\xb9 参见例如如何将图像与 boost gil 结合起来?
\n| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |