我正在尝试将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”中输入随机内容,我会收到编译错误,显示它正在解析该头文件。
有什么想法吗?
答案 0 :(得分:3)
我曾经遇到过完全相同的问题而且帮助我的是简单的转换 - 因为如果你查看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));
希望它有所帮助!