繁体   English   中英

如何在x64上使用boost:gil:png_write_view避免此警告

[英]How can I avoid this warning with boost:gil:png_write_view on x64

以下代码发出警告:

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

在64位下使用VS 2010编译时。 它说:

\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。

看来,至少从Boost v1.35(例如, http: //objectmix.com/c/733997-how-use-graphics.html#post2586573)中就知道了这个特定问题。

在检查Boost trac数据库时,我看到其他模块的票据相似,但GIL没有任何票据。 最好的办法是开一张新票。

同时,由于它似乎并不“灾难性”,因此您可以通过以下方式包装#include

#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无法让您区分应用程序/头文件)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM