Boost.GILによるpng生成

libpngってC++ friendlyじゃないよね、って呟いていたら、id:faith_and_braveさんに「そこでBoost.GILですよ」と言われたので、作ってみた。

#include <utility>
#include <boost/gil/gil_all.hpp>
#include <boost/gil/extension/io/png_io.hpp>

int main() {
    namespace gil = boost::gil;

    gil::point2<ptrdiff_t> dim(400, 400);
    gil::gray8_image_t img(dim);
    auto view = gil::view(img);

    for (ptrdiff_t i = 0; i < dim.y; ++i) {
        for (ptrdiff_t j = 0; j < dim.x; ++j) {
            view(i, j) = 255 * (std::min(i, j) / static_cast<double>(dim.x));
        }
    }

    gil::png_write_view("img.png", view);

    return 0;
}

IO時にlibpngを読んでいるので、

 $ g++-4.5 -std=c++0x -o gil gil.cpp -W -Wall -O3 -lpng

のようにlibpngをリンクしないとコンパイルできません。