Visual studio 2015 在VS 2015 Express中使用libpng加载png图像时发生卤化物错误

Visual studio 2015 在VS 2015 Express中使用libpng加载png图像时发生卤化物错误,visual-studio-2015,png,libpng,halide,Visual Studio 2015,Png,Libpng,Halide,当我试图调用Halide中的load\u image函数时,我得到一个错误“init\u io期间出错”。调试显示错误在load\u png函数中 bool load_png(const std::string &filename, ImageType *im) { #ifdef HALIDE_NOPNG return false; #else // HALIDE_NOPNG png_byte header[8]; png_structp png_ptr; png_infop i

当我试图调用Halide中的
load\u image
函数时,我得到一个错误“init\u io期间出错”。调试显示错误在
load\u png
函数中

bool load_png(const std::string &filename, ImageType *im) {
#ifdef HALIDE_NOPNG
    return false;
#else // HALIDE_NOPNG
png_byte header[8];
png_structp png_ptr;
png_infop info_ptr;

/* open file and test for it being a png */
Internal::FileOpener f(filename.c_str(), "rb");
if (!check(f.f != nullptr, "File %s could not be opened for reading\n", filename.c_str())) return false;
if (!check(fread(header, 1, 8, f.f) == 8, "File ended before end of header\n")) return false;
if (!check(!png_sig_cmp(header, 0, 8), "File %s is not recognized as a PNG file\n", filename.c_str())) return false;

/* initialize stuff */
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);

if (!check(png_ptr != nullptr, "png_create_read_struct failed\n")) return false;

info_ptr = png_create_info_struct(png_ptr);
if (!check(info_ptr != nullptr, "png_create_info_struct failed\n")) return false;

**if (!check(!setjmp(png_jmpbuf(png_ptr)), "Error during init_io\n")) return false;**

png_init_io(png_ptr, f.f);
png_set_sig_bytes(png_ptr, 8);

png_read_info(png_ptr, info_ptr);
这是调用者函数

#include "stdafx.h"
#include "Halide.h"
#include "halide_image_io.h"
using namespace Halide::Tools;

#include <stdio.h>

int main(int argc, char **argv) 
{

    Halide::Image<uint8_t> input = load_image("../images/rgb.png");

    save_image(input, "brighter.png");

    printf("Success\n");
    return 0;

}
#包括“stdafx.h”
#包括“卤化物.h”
#包括“卤化物图像io.h”
使用名称空间Halide::工具;
#包括
int main(int argc,字符**argv)
{
卤化物::图像输入=加载_图像(“../images/rgb.png”);
保存图片(输入“brighter.png”);
printf(“成功”\n);
返回0;
}
环境

  • Visual Studio 2015
  • Libpng 1.2.35
  • zlib 1.2.11
  • 视窗7
  • 我已经尝试过这个解决方案,但是没有用。


    有什么想法吗?

    事实证明,使用预编译的DLL/静态库存在问题。我通过使用VS 2015从源代码处编译最新的libpng解决了这个问题。

    这是在您的新代码中,还是在已经使用此代码的现有卤化物测试/应用程序中失败了?(例如tests/correction/image_io.cpp)@StevenJohnson作为Windows用户,他可能从2016/10/22获得了最新的二进制版本,而不是Linux默认的从源代码构建。你们应该做更多的发布。你们能在这里上传rgb.png文件吗?@KhouriGiordano我使用了卤化物教程文件夹中的rgb.png。@StevenJohnson我自己写测试代码。我将尝试运行image_io.cpp,看看是否一切正常