#c #boost-gil
#c #boost-gil
Вопрос:
Я пытался прочитать документацию boost :: gil, но она находится где-то между отсутствием и запутанностью.
Если оставить в стороне разглагольствования, мне нужен пример того, как сделать следующее:
Создайте образ, скажем, 512×512. Заполните его красными пикселями. Запись в PNG.
Я вообще ничего не могу найти о том, как это сделать, в документации для gil. В частности, часть создания изображения или заполнения его пикселями.
Если кто-нибудь может помочь, спасибо.
Комментарии:
1. У меня тоже была такая же проблема, когда я впервые пришел в GIL (еще до того, как это было в boost)… в учебном материале показано множество полезных вещей, связанных с типами представлений… но потом вы приходите попробовать это сами и понимаете, что вам все еще не дали представления о том, как на самом деле создать конкретное изображение для представления, на которое можно ссылаться! В любом случае, придерживайтесь этого, это действительно невероятно элегантная библиотека для работы с изображениями.
2. @timday Несколько хороших комментариев. Мы пытаемся улучшить GIL, включая документацию. Если вы заметили проблемы или у вас есть комментарии, пожалуйста, рассмотрите возможность открытия проблемы на github.com/boostorg/gil
Ответ №1:
Я еще не использовал GIL, но тоже хочу его изучить. Посмотрев на руководство по дизайну и погуглив ошибку, связанную с libpng, кажется, что простейшим примером является
#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_pixel_t red(255, 0, 0);
fill_pixels(view(img), red);
png_write_view("redsquare.png", const_view(img));
}
у меня работает с -lpng
в командной строке, создавая этот образ
Комментарии:
1. Превосходно простое и эффективное решение. Также спасибо за предупреждение об ошибке libpng. Я обнаружил, что в Visual C я должен включать библиотеки и каталоги, что-то еще, что либо отсутствовало, либо было скрыто в его документации: p
2. Для будущих читателей, которые, возможно, захотят управлять цветом каждого пикселя: просто просмотрите свое изображение (
rgb8_image_t::view_t v = view(img)
) и установите на нем пиксель :v(10,20) = rgb8_pixel_t(255, 0, 123)
. Или используйте итераторы в представлении, как в документах.3. Ответ, предоставленный @cubbi, абсолютно корректен для GIL, выпущенного в Boost 1.67 или более ранней версии. С тех пор расширения ввода-вывода были полностью переписаны в Boost. GIL выпущен в версии Boost 1.68, пример потребует корректировки. Не стесняйтесь спрашивать github.com/boostorg/gil#community по любым вопросам