簡體   English   中英

鹵化物錯誤在VS 2015 Express中使用libpng加載png圖像

[英]Halide error loading png images using libpng in VS 2015 Express

當我嘗試在Halide中調用load_image函數時,出現錯誤“ init_io期間出錯”。 調試顯示錯誤在load_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:寫入png失敗:在標頭寫入錯誤處停止

任何想法?

事實證明,使用預編譯的DLL /靜態庫存在問題。 我設法使用VS 2015從源代碼中編譯了最新的libpng來解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM