Search code examples
c++boostpnggilboost-gil

Positioning an image within an image using GIL from Boost in C++


I am trying to figure out how to position an image within newly created image in C++ using GIL from Boost library.

#define png_infopp_NULL (png_infopp)NULL
#define int_p_NULL (int*)NULL
#include <boost/gil/gil_all.hpp>
#include <boost/gil/extension/io/png_dynamic_io.hpp>
using namespace boost::gil;
int main()
{
    rgb8_image_t img(512, 512);
    rgb8_image_t img1;
    rgb8_image_t img2;
    png_read_image("img1.png", img1);//Code for loading an image
    png_read_image("img2.png", img2); //Code for loading 2nd image "img2.png" 
    //loading position of the images to an array or some kind of variable
    //passing in images and postions to the function to apply changes on newly created image with the  size of 512, 512 
    png_write_view("output.png", const_view(img)); //saving changes as "output.png"
}

image of what i want to do


Solution

  • You can just use the subimage_view to position your images and the copy_pixels to copy them.
    You need to take care that the sizes of the input images and the output subview match. If they don't match you can also use the resize_view.
    Something like that:

    rgb8_image_t img1;
    jpeg_read_image("img1.jpg", img1);
    rgb8_image_t img2;
    jpeg_read_image("img2.jpg", img2);
    
    rgb8_image_t out_img(512, 512);
    copy_pixels (view(img1), subimage_view(view(out_img), x, y, width, height));
    copy_pixels (view(img2), subimage_view(view(out_img), x, y, width, height));
    png_write_view("output.png", const_view(out_img));