【问题标题】:Halide error loading png images using libpng in VS 2015 ExpressHalide 在 VS 2015 Express 中使用 libpng 加载 png 图像时出错
【发布时间】:2017-03-09 16:34:13
【问题描述】:

当我尝试在 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: writing a png fails: stops at header write error

有什么想法吗?

【问题讨论】:

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

标签: visual-studio-2015 png libpng halide


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 2012-12-29
    • 2016-11-08
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多