使用libpng从像素数据写入PNG文件
Writing PNG file from pixel data using libpng
我正试图从glReadPixels在openGL中读取的像素数据中编写PNG文件(以PNG格式保存图像),使用以下代码(从这里复制):
bool writePNGFileFromBuffer(const char *filename, unsigned char *pixels, int w, int h)
{
png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);//8
if (!png)
return false;
png_infop info = png_create_info_struct(png);//7
if (!info) {
png_destroy_write_struct(&png, &info);//
return false;
}
FILE *fp = fopen(filename, "wb");
if (!fp) {
png_destroy_write_struct(&png, &info);//
return false;
}
png_init_io(png, fp);//9
png_set_IHDR(png, info, w, h, 8 /* depth */, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);//10
png_colorp palette = (png_colorp)png_malloc(png, PNG_MAX_PALETTE_LENGTH * sizeof(png_color));//4
if (!palette) {
fclose(fp);
png_destroy_write_struct(&png, &info);//
return false;
}
png_set_PLTE(png, info, palette, PNG_MAX_PALETTE_LENGTH);//12
png_write_info(png, info);//1
png_set_packing(png);//5
png_bytepp rows = (png_bytepp)png_malloc(png, h * sizeof(png_bytep));//
for (int i = 0; i < h; ++i)
rows[i] = (png_bytep)(pixels + (h - i) * w * 3);
png_write_image(png, rows);//2
png_write_end(png, info);//6
png_free(png, palette);//11
png_destroy_write_struct(&png, &info);//3
fclose(fp);
delete[] rows;
return true;
}
我在附加依赖项中链接了libpng和zlib库。但是当我编译代码时,它给出了以下错误:
错误77 LNK2001:未解析的外部符号png_write_info
在上面代码片段中标记的大约12个实例处给出此错误。我很清楚,它是无法找到函数的定义,但我不知道为什么?
任何帮助都会很感激。由于
编辑:我查看了头文件"png.h",它包含了所有函数的声明。函数在"pngwrite.c"中定义,我认为它应该从链接库中获取。
Edit2:打了几天后,我发现,当我改变我的项目的输出类型(其中我使用libpng.lib)静态库(. Lib),一切工作和代码编译得很好,但与。dll输出抛出上述指定的错误。
我的问题是,我必须使用。dll输出,因为我在另一个巨大的项目中使用,我不能更改为接受。lib。
有什么帮助吗?
您可能缺少必须从中复制的"pnglibconf.h"脚本/pnglibconf.h。在源目录中预构建到pnglibconf.h
相关文章:
- 从存储为 Windows 资源 (c++) 的 png 中获取 png 文件数据
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 如何启用libMagick++以保存.png文件格式
- 无法在CLion(macOS)上打开带有CImg的.png文件
- 尝试使用 CPP 在一个 Qt 窗口中显示多个 png 文件
- 我正在尝试SDL_DisplayFormat一个.png文件,我想,我可能缺少依赖项
- 从.ppm转换为.png文件
- 未找到"png.h"文件,当包含在Qt小部件项目中时
- 将较小的PNG文件组合在C 中的较大PNG文件中
- 使用膨胀来解压缩 png 文件
- 从 cin 读取 PNG 文件
- 以编程方式馈送 KML 文件并检索/生成.png文件
- SDL_Image libpng 错误:不是 PNG 文件
- 使用 C++、libpng 和 OpenMP 并行创建 PNG 文件
- 使用 boost.gil 逐像素读取.png文件
- Visual Studio 2012(C++)-使用附带的.png文件
- 0x00000000处的访问冲突正在使用SDL_image库加载PNG文件
- 需要从png文件中读取数据并将其保存到新文件中,如何?C++
- QT .png文件没有显示在屏幕上
- 如何使用c++从png文件中提取像素