2017-03-09 96 views
0

当我尝试在Halide中调用load_image函数时,出现错误“init_io期间出错”。调试显示错误在load_png函数中。Halide在VS 2015 Express中使用libpng加载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; 

} 

环境。

  1. 的Visual Studio 2015年
  2. 的libpng 1.2.35
  3. zlib的1.2.11
  4. Windows 7的

我曾尝试这种解决方案,但它并不能帮助。 libpng: writing a png fails: stops at header write error

任何想法?

+0

这是在你的新代码中,还是在已经使用此代码的现有Halide测试/应用程序中失败? (例如,测试/正确性/ image_io.cpp) –

+0

@StevenJohnson作为一名Windows用户,他可能从2016/10/22获得了最新的二进制版本,与源代码的Linux默认版本相比。你们应该做更多的发布。 –

+0

你可以在这里上传rgb.png文件吗? –

回答

0

事实证明,使用预编译的DLL /静态库存在一个问题。我已经设法通过使用VS 2015编译来自源代码的最新libpng来解决这个问题。