【问题标题】:Problems using libpng in iPhone project在 iPhone 项目中使用 libpng 的问题
【发布时间】:2012-08-24 15:44:25
【问题描述】:

我正在尝试将 libpng 添加到我的 iPhone 项目中。

我将 .c 和 .h 文件复制到它们自己的目录“thirdparty/libpng/”中,并将 png.h 包含在我的纹理类中:

#ifndef PNG_H
    #include "thirdparty/libpng/png.h"
#endif

此时我的项目编译良好,没有任何警告和错误。

接下来我尝试添加一个函数来检查纹理是否为 png,但在 png_sig_cmp 上出现编译错误,即使包含了 png.h:

#define PNG_BYTES_TO_CHECK 4
int GETexture::CheckIfValidPNGTexture( const char* pTextureName, FILE **ppFp )
{
    char buf[PNG_BYTES_TO_CHECK];

    /* Open the prospective PNG file. */
    if ((*ppFp = fopen(pTextureName, "rb")) == NULL)
        return 0;

    /* Read in some of the signature bytes */
    if (fread(buf, 1, PNG_BYTES_TO_CHECK, *ppFp) != PNG_BYTES_TO_CHECK)
        return 0;

    /* Compare the first PNG_BYTES_TO_CHECK bytes of the signature.
     Return nonzero (true) if they match */

    return(!png_sig_cmp(buf, (png_size_t)0, PNG_BYTES_TO_CHECK)); // <- COMPILE ERROR

}

我得到的错误是:没有匹配函数调用'png_sig_cmp'

标题肯定会被包含在内。如果我尝试在其中输入一些随机的内容,例如“sdfdd”,则会出现编译错误,表明它正在解析该头文件。

有什么想法吗?

【问题讨论】:

    标签: iphone xcode libpng


    【解决方案1】:

    我曾经遇到过完全相同的问题,帮助我的是简单的转换 - 因为如果你查看 png.h 头文件,png_sig_cmp 定义:

     png_sig_cmp(png_const_bytep sig, png_size_t start, png_size_t num_to_check)
    

    第一个参数是 png_const_bytep - 定义为:

    PNG_CONST png_byte        FAR * png_const_bytep
    

    真正翻译为:

    const unsigned char* 
    

    我会进行简单的类型转换:

    return(!png_sig_cmp((png_const_bytep)buf, (png_size_t)0, PNG_BYTES_TO_CHECK));
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 2017-01-18
      • 2012-05-02
      • 1970-01-01
      相关资源
      最近更新 更多