我正在尝试使用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) 我一直在尝试构建GLTools库,它将OpenGL SuperBible附带到带有automake的libtool库中.
我已经设置了autoconf和automake但是当涉及到实际构建库时,我得到:
$ make
make: *** No rule to make target `GLBatch.lo', needed by `libgltools.la'. Stop.
Run Code Online (Sandbox Code Playgroud)
我已经搜索了谷歌,因为我的理智会让我无所事事,我是汽车制造新手所以我不太确定要搜索什么.我确定这是一个小错误,或者我错过了一些基本的东西.
这是我的Makefile.am:
ACLOCAL_AMFLAGS = -I m4
lib_LTLIBRARIES = libgltools.la
libgltools_la_SOURCES = GLBatch.cpp GLShaderManager.cpp GLTriangeBatch.cpp GLTools.cpp math3d.cpp glew.c
#libgltools_la_CFLAGS =
libgltools_la_LIBADD = -lX11 -lglut -lGL -lGLU -lm
include_HEADERS = GLBatchBase.h GLBatch.h GLFrame.h GLFrustum.h GLGeometryTransform.h GLMatrixStack.h GLShaderManager.h GLTools.h GLTriangleBatch.h math3d.h StopWatch.h GL/glew.h GL/glxew.h GL/wglew.h
EXTRA_DIST = autogen.sh
Run Code Online (Sandbox Code Playgroud)
而且我的configure.ac如果重要:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script. …Run Code Online (Sandbox Code Playgroud)