1

次のコードは警告を発行します。

boost::gil::rgb8_image_t img(10, 10);
boost::gil::png_write_view("TenByTen.png", view(img));

VS 2010 で 64 ビットでコンパイルした場合。それは言います:

\boost\gil\extension\io\png_io_private.hpp(341): warning C4244: 'argument' : conversion from '__int64' to 'png_uint_32', possible loss of data
\boost\gil\extension\io\png_io.hpp(202) : see reference to function template instantiation 'void boost::gil::detail::png_writer::apply<View>(const View &)' being compiled
          with
          [
              View=boost::gil::image_view<boost::gil::rgb8_loc_t>
          ]
          main.cpp(20) : see reference to function template instantiation 'void boost::gil::png_write_view<boost::gil::image_view<Loc>>(const char *,const View &)' being compiled
          with
          [
              Loc=boost::gil::rgb8_loc_t,
              View=boost::gil::image_view<boost::gil::rgb8_loc_t>
          ]

apply() で png_set_IHDR() を呼び出すと png_uint_32 が返されることは明らかですが、view.width() は符号付き __int64 (おそらく ptrdiff_t) のようです。

私がそれについて何ができるか知っている人はいますか?boost:gil は 64 ビットで動作することを意図していると思います。

ブースト 1_50 を使用します。

4

1 に答える 1

0

特定の問題は、(少なくとも) Boost v1.35 (例: http://objectmix.com/c/733997-how-use-graphics.html#post2586573 ) から知られているようです。

Boost trac データベースをチェックすると、他のモジュールの同様のチケットが表示されますが、GIL のチケットは表示されません。おそらく最善の方法は、新しいチケットを開くことです。

一方、「壊滅的」には見えないため、次のように#include(s) をラップできます。

#ifdef _MSC_VER
#  pragma warning(push)
#  pragma warning(disable: 4244)  // Perhaps also 4100, 4127, 4512
// GIL headers
#  pragma warning(pop)
#endif

「方法: 特定の C/C++ 警告のコード分析を有効または無効にする」も参照してください。

(clang/gcc には-isystemスイッチがありますが、Visual Studio ではアプリケーションとヘッダー ファイルを区別できないと思います)

于 2014-10-20T14:17:27.773 に答える