標準の jpeg_write_viewってファイル名を指定しての出力しか無く、cgi等で直接標準出力へ出力したいときに困る。
で、jpeg_write_view(const char* filename,…)と jpeg_write_view(const std::string& filename,…)の実装を見てみると、ファイル名から detail::jpeg_writerのインスタンスを作成してビューを渡しているだけな事がわかる。
そこで detail::jpeg_writerの実装を見てみると…なんだ、FILEを受け取るコンストラクタあるじゃん。
んなわけで、以下のようなテンプレートを定義してやるだけで事は済んだ。
5101.hnamespace boost {
namespace gil {
template <typename View>
inline void jpeg_write_view(FILE *ostream, const View& view, int quality = 100) {
BOOST_STATIC_ASSERT(jpeg_write_support<View>::is_supported);
detail::jpeg_writer m(ostream);
m.apply(view, quality);
}
}
} // namespace boost::gil