我正在尝试为使用libpng的应用程序创建CMake层次结构.Libpng需要zlib.
由于CMakeLists.txt与zlib和libpng一起分发,我的第一个想法是制作以下结构:
/development
CMakeLists.txt
/zlib-1.2.5
CMakeLists.txt <- provided by zlib
-sources-
-build of zlib?-
/libpng154
CMakeLists.txt <- provided by libpng
-sources-
-build of libpng?-
/myapp
CMakeLists.txt
-sources-
/build
-build of myapp-
-build of zlib?-
-build of libpng?-
Run Code Online (Sandbox Code Playgroud)
...然后,在顶级CMakeLists.txt中,放置如下内容:
project(everything)
...
add_subdirectory(zlib-1.2.5)
add_subdirectory(libpng154)
add_subdirectory(myapp)
...
Run Code Online (Sandbox Code Playgroud)
但没有运气.libpng的CMakeLists.txt执行find_package(ZLIB ...),但它不知道在哪里查看.这可以通过将zlib"安装"到/ usr在Mac OS上解决.但这不适用于Windows.
所以我想我不会进入子目录.只需编译并构建zlib和libpng,然后在遍历我自己的应用程序之前执行find_package(PNG ...)(分别编译和构建zlib和libpng(通过提供的CMakeLists.txt),至少在Mac OS上运行,但再次,只因为zlib安装到/ usr).
project(everything)
...
find_package(PNG...)
add_subdirectory(myapp)
...
Run Code Online (Sandbox Code Playgroud)
没有运气,find_package(PNG ...)失败了.我不知道如何让find_package(PNG ...)知道在哪里寻找我刚建立的libpng库.例如,对于boost,您可以设置"BOOST_ROOT"变量.libpng有什么类似的吗?
亲切的问候,
丹尼尔德克斯
我正在尝试使用C读取PNG文件以与OpenCL一起使用.OpenCL不支持24位RGB图像,因此我需要将数据从RGB扩展到RGBA.我使用的PNG都是24位的,因此可以避免头痛.
我试图使用png_set_filler和png_set_add_alpha,我认为它们大致完全相同以解决问题,但它们都会导致此错误:
libpng error: sequential row overflow
Run Code Online (Sandbox Code Playgroud)
这是完整的功能:
int LoadPNG24(unsigned char ** pixelBuffer, const char *filename, unsigned int *width, unsigned int *height) {
png_byte header[8];
//open file as binary
FILE *fp = fopen(filename, "rb");
if (!fp) {
return TEXTURE_LOAD_ERROR;
}
//read the header
fread(header, 1, 8, fp);
//test if png
int is_png = !png_sig_cmp(header, 0, 8);
if (!is_png) {
fclose(fp);
return TEXTURE_LOAD_ERROR;
}
//create png struct
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr) {
fclose(fp);
return (TEXTURE_LOAD_ERROR);
} …Run Code Online (Sandbox Code Playgroud) 我的应用程序被终止,并且日志:libpng警告:忽略错误的自适应过滤器类型。我想知道原因,以及解决办法。
png_read_info (png_ptr, info_ptr);
{
png_byte color_type = info_ptr->color_type;
png_byte bit_depth = info_ptr->bit_depth;
...
Run Code Online (Sandbox Code Playgroud)
我得到的最后两行
错误:取消引用指向不完整类型的指针
怎么了?在libpng 1.4中,这总是好的.
如果您天真地按照GraphicsMagick网站上的步骤操作,在运行后./configure,您最终没有PNG支持:
checking for PNG support ...
checking png.h usability... no
checking png.h presence... no
PNG --with-png=yes no
Run Code Online (Sandbox Code Playgroud)
这使得一个非常无用的GraphicsMagick安装.
如何启用PNG支持?Libpng似乎已经安装,但未检测到:
> $ sudo yum install libpng
> Package 2:libpng-1.2.49-1.12.amzn1.x86_64 already installed and latest version
Run Code Online (Sandbox Code Playgroud) 我试过查看libpng文档,但没找到我要找的东西.
我有一个完全在内存缓冲区中的PNG文件,如何加载此文件(除了创建临时文件的明显解决方案)?
不确定它是否相关,但我使用ctypes从Python调用libpng.
当我尝试从内存中读取PNG时,我遇到了这个时髦的错误:
libpng error:: PNG unsigned integer out of range
Run Code Online (Sandbox Code Playgroud)
此错误是由
png_read_info(png_ptr,info_ptr);
Run Code Online (Sandbox Code Playgroud)
哪个使用以下处理程序
static void ReadDataFromBuffer(png_structp png_ptr, png_bytep outBytes,
png_size_t byteCountToRead){
PNGDataPtr dataptr=(PNGDataPtr)png_get_io_ptr(png_ptr);
png_uint_32 i;
cout<<byteCountToRead<<endl;
cout<<&outBytes<<endl;
cout<<dataptr->len<<endl;
cout<<dataptr->p<<endl;
if(byteCountToRead>dataptr->len){
png_error(png_ptr,"EOF");
return;
}
for(i=0;i<byteCountToRead;i++){
outBytes[i]=dataptr->p[i];
}
dataptr->p+=byteCountToRead;
dataptr->len-=byteCountToRead;
png_uint_32 a = png_get_uint_32(outBytes);
cout<<a<<" "<<PNG_UINT_31_MAX<<endl;
}
Run Code Online (Sandbox Code Playgroud)
通过一些密集的搜索,我发现错误由pgnrutil.c中的以下代码调用:
png_uint_32 /* PRIVATE */
png_get_uint_31(png_structp png_ptr, png_bytep buf)
{
png_uint_32 i = png_get_uint_32(buf);
if (i > PNG_UINT_31_MAX)
png_error(png_ptr, "PNG unsigned integer out of range.\n");
return (i);
}
Run Code Online (Sandbox Code Playgroud)
所以我检查了png_get_uint_32(outBytes)的值,确实高于PNG_UINT_31_MAX,230374511.
我该如何解决?
编辑:
关于PNGDataPtr的一些说明:
typedef struct{
png_bytep p; …Run Code Online (Sandbox Code Playgroud) 我试图使用Node.js imagemin压缩我的服务器上的很多图像.我喜欢使用imagemin因为我知道如何将它指向特定的目录.
我正在使用CentOS 6,当我运行我的文件时,我收到错误:
node_modules/imagemin/node_modules/imagemin-pngquant/node_modules/pngquant-bin/vendor/pngquant:/lib64/libc.so.6:未找到版本`GLIBC_2.14'
另外,当我安装了imagemin时npm install imagemin,我得到一个错误,上面写着:
错误:pngquant无法构建,请确保已安装libpng-dev
关于我能做些什么来解决这个问题的任何想法?
切换到Xcode 7.3,并在同一个项目上运行项目后,我得到以下错误 -
libpng error: CgBI: unhandled critical chunk
Run Code Online (Sandbox Code Playgroud)
我已将Compress PNG Files项目目标的构建设置设置为NO.
我清理并重建了项目,但仍然没有工作,并给出了上述错误.
欢迎提出任何解决上述问题的建议/帮助.提前致谢.
我正在尝试在我的 Mac 上安装该reticulate软件包,它取决于该png软件包,而该软件包又取决于libpng. 我安装了libpngbrew ,但png由于缺少以下内容而导致包失败libpng-config:
/bin/sh: libpng-config: command not found
Run Code Online (Sandbox Code Playgroud)
不过我有这个/opt/homebrew/bin/libpng-config:
which libpng-config
/opt/homebrew/bin/libpng-config
Run Code Online (Sandbox Code Playgroud)
我发现这个指定了需要libpng-dev,但我不知道如何在我的 Mac 上安装它。任何帮助表示赞赏。