Расположение изображения на изображении с помощью GIL из Boost в Stack Overflow

Я пытаюсь выяснить, как расположить изображение во вновь созданном изображении в C ++, используя GIL из библиотеки Boost.

#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"}

изображение того, что я хочу сделать

0

Решение

Вы можете просто использовать subimage_view позиционировать ваши изображения и copy_pixels скопировать их.
Вы должны позаботиться о том, чтобы размеры входных изображений и выходного подпредставления совпадали. Если они не совпадают, вы также можете использовать resize_view,
Что-то вроде того:

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));
2

Другие решения

Это решение, если кому-то интересно.

Как установить Boost

Как установить LibPng (Необходим для загрузки png)

#define _CRT_SECURE_NO_DEPRECATE
#define _SCL_SECURE_NO_WARNINGS
#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 out_img(512, 512);
rgb8_image_t img1;
rgb8_image_t img2;
png_read_image("img1.png", img1);//Code for loading img1
png_read_image("img2.png", img2);//Code for loading img2
copy_pixels(view(img1), subimage_view(view(out_img), 0, 0, 50, 50));
copy_pixels(view(img2), subimage_view(view(out_img), 462, 462, 50, 50));
png_write_view("output.png", const_view(out_img));

}

Все эти #define необходимы для того, чтобы Visual Studio не отображал ошибки.

Кстати, в каталоге программы должны быть img1.png и img2.png, иначе будут обнаружены ошибки памяти.

0