閉じる

boost::gil

以前から気になっていた boost::gil、思い出したように少しいじってみた。

boost-1.53.0と gil_2.zip(Apr 5, 2012)をインストール。

gccのバージョンなのか、そのままだとビルドが通らなかったのでパッチを作成。

3361-0.log
gil_2$ patch -p1 < gil_2-gcc4.7.1.patch

jpegファイルを読んで、矩形を切り取って jpegファイルとして書き出すだけのコードを作成したところ、とりあえず動いているよう。

3361-1.cc
#include <boost/gil/gil_all.hpp>
#include <boost/gil/extension/io_new/jpeg_all.hpp>

int main(int argc,char **argv)
{
if(argc<3){
return 1;
}
using namespace boost::gil;
rgb8_image_t src;
try{
read_image(argv[1],src, jpeg_tag());
printf("%dx%d\n",src.width(),src.height());
rgb8_image_t dst( 200, 200 );
copy_pixels( subimage_view(view(src),100,100,200,200), view(dst));
write_view(argv[2],const_view(dst), jpeg_tag());
}catch(const std::ios_base::failure &e){
fprintf(stderr,"std::ios_base::failure exception catched\n");
}

return 0;
}

まぁ アルゴリズム系はそのまんまで、IO周りが新しくなっているだけなのでその辺り中心のチェック。

ちなみに、上記のコードは rgb8_image_tで読んでいるけど、グレースケールのファイルはちゃんと gray8_image_tで受けてやらないと「Image types aren’t compatible.」ってな例外を飛ばしてくれるので注意が必要。

numeric.zipについても numeric.zip(Apr 19, 2012)@gil-contributionsが最新なのかな?

デフォルトだとかなりの高画質で保存することになるので調整するコードを。

3361-2.cc
#include <boost/gil/gil_all.hpp>
#include <boost/gil/extension/io_new/jpeg_all.hpp>

int main(int argc,char **argv)
{
if(argc<3){
return 1;
}
using namespace boost::gil;
rgb8_image_t src;
try{
read_image(argv[1],src, jpeg_tag());
printf("%dx%d\n",src.width(),src.height());
rgb8_image_t dst( 200, 200 );
copy_pixels( subimage_view(view(src),100,100,200,200), view(dst));
image_write_info< jpeg_tag > compressed_jpeg_info;
compressed_jpeg_info._quality = 30;// 0〜100で画質を調整(100が gil::io_newのデフォルト)
write_view(argv[2],const_view(dst), compressed_jpeg_info);
}catch(const std::ios_base::failure &e){
fprintf(stderr,"std::ios_base::failure exception catched\n");
}

return 0;
}

bmpの書き出しは基本的に jpeg_tag()を bmp_tag_()に変更するだけなのだけど、ビルドを通すまで骨が折れそうだ。
そもそもこんな環境でビルドが通らないって、既にメンテされてないよな。

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)