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"
}
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));