पारदर्शी चित्र पढ़ने से बढ़ावा मिलता है। Cil C ++

Jan 17 2021

मेरे पास एक पारदर्शी पृष्ठभूमि वाली छवि है और मैं इसे एक और छवि पर कॉपी करना चाहता हूं दोनों चित्र png प्रारूप हैं जिन्हें मैंने बढ़ावा देने की कोशिश की है :: 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{});
}

जवाब

3 sehe Jan 17 2021 at 08:20

मम। इसे पढ़कर ऐसा लगता है कि आप इसे क्या कहते हैं:

bg::resize_view(bg::view(temp), bg::view(pic), bg::bilinear_sampler{});

यह आपकी इनपुट छवि के आकार को देखने के साथ पिक्सेल को भरता है। नया आकार आपके जेल से बिल्कुल मेल खाता है। अब क:

bg::resize_view(bg::view(temp), bg::view(pic), bg::bilinear_sampler{});

इस पर jailछवि से सभी पिक्सेल की प्रतिलिपि बनाता है। यह किसी भी पिक्सेल को बदलता है जो आपने अभी-अभी रिसाइज्ड इनपुट इमेज से भरा है।

आपको आउटपुट अच्छा लगेगा

ध्यान दें कि पृष्ठभूमि की जांच कैसे की जाती है। पारदर्शिता को इंगित करने के लिए यह पारंपरिक पैटर्न है। वह ग्रे नहीं है। यह पूरी पारदर्शिता के साथ सिर्फ खाली पिक्सेल है।

क्या आप संभवतः चाहते थे कि पृष्ठभूमि पिक्सल रखना था। Boost GIL but में हाइलेवल पिक्सेल ऑपरेशन नहीं दिखता है, लेकिन आप इसे स्वयं लिखते हैं:

using Img = bg::rgba8_image_t;
using Pix = Img::value_type;

void overlay_combine(Img& pic, Img const& overlay) {
    assert(pic.dimensions() == overlay.dimensions());
    bg::transform_pixels(
        view(pic), const_view(overlay), view(pic),
        [](Pix const& a, Pix const& b) {
            return get_color(b, bg::alpha_t{})? b : a;
        });
}

अब आप लिखते mainहैं:

int main() {
    Img jail, polar;
    bg::read_and_convert_image("./jail_PNG16.png", jail, bg::png_tag{});
    bg::read_and_convert_image("./polar.png", polar, bg::png_tag{});

    Img pic(jail.dimensions());
    bg::resize_view(bg::view(polar), bg::view(pic), bg::bilinear_sampler{});
    overlay_combine(pic, jail);

    bg::write_view("out.png", bg::view(pic), bg::png_tag{});
}

और परिणाम है:

आप अनुमान लगा सकते हैं कि मुझे कहां मिला polar.png:)

¹ देखें उदाहरण कैसे बढ़ावा देने वाली गिल के साथ छवियों को संयोजित करें?