2017-03-09 12 views
0

Halide에서 load_image 함수를 호출하려고하면 "init_io 오류"오류가 발생합니다. 디버깅 오류가 load_png 기능에 있음을 보여줍니다. 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. 비주얼 스튜디오 2015
  2. 의 libpng 1.2.35
  3. ZLIB 1.2.11
  4. 윈도우 7

나는이 솔루션을 시도했다, 그러나 그것은 도움이되지 않습니다. libpng: writing a png fails: stops at header write error

아이디어가 있으십니까?

+0

이 코드가 새 코드입니까, 아니면이 코드를 이미 사용하고있는 기존 Halide 테스트/응용 프로그램에서 실패한 것입니까? (예 : tests/correctness/image_io.cpp) –

+0

@StevenJohnson Windows 사용자 인 그는 2016/10/22의 최신 바이너리 버전을 소스에서 빌드하는 Linux 버전과 비교했을 것입니다. 너희들은 더 많은 방출을해야한다. –

+0

여기 rgb.png 파일을 업로드 할 수 있습니까? –

답변

0

미리 컴파일 된 DLL/정적 라이브러리를 사용할 때 문제가 발생합니다. VS 2015를 사용하여 소스에서 최신 libpng을 컴파일하여이 문제를 해결할 수있었습니다.