linux下libpng库的安装以及使用

前几天手里的智能锁项目 , 收到产品的建议(命令)说 , 就是人脸识别成功的时候 , 不要只显示摄像头捕捉到的图像 , 要弄个酷炫一点的背景, 背景里图片中间有个圆圈, 人脸就放到圆圈里也就是类似这样。。

当然, 这是我思考了好几个小时的结果, 开始想不明白要怎么实现,其实想通了也很简单, 三个步骤

A 把背景图像的RGB读出来 out_buf

B 把摄像头采集到的图像读出来(分辨率和背景图像一样) , in_buf

C 如果out_buf当前像素点是黑色不变, 否则填充in_buf到out_buf

有了思路了 ,  就要付诸行动  , 花了好几个小时来了解了一下PNG图片的格式 , 又找到一个资料比较全的库 , 就各种找资料 , 把png的读写跑了一遍 ,  特意记录一下

关于PNG文件格式这里不讨论 , 有兴趣的朋友直接百度"PNG文件格式"会得到自己想要的答案


一: 安装PNG库文件

因为PNG文件需要用到zlib进行编解码,  所以用到libpng的同时也需要zlib加密解密

本文使用的是libpng版本和zlib版本如下:

下载地址:

https://sourceforge.net/projects/libpng/files/

下载完之后如下命令顺序执行:

libpng:
#解压
tar -xzvf libpng-1.6.26.tar.gz && cd libpng-1.6.26
#安装
./configure
make check
sudo make install
sudo ldconfig

zlib:
#解压:
tar -xf zlib-1.2.11.tar.xz && cd zlib-1.2.11
#安装
./configure 
sudo make install
sudo make

安装成功如下图 :

运行pkg-config libpng16 zlib --libs --cflags得到正确的头文件和链接库的位置

二 : 使用libpng

libpng有一套自己的流程如下:

1:初始化png_structp结构体 (用于和打开的文件指针绑定)

2:初始化png_infop结构体 (此结构体包含各种图片信息)

3:设置错误返回点 (如果是Libpng内部出现错误, 则会跳到你设置的错误返回点处执行)

4:绑定文件IO流到png_structp结构体 (打开的文件和png_structp结构体实例进行绑定)

5:写入需要生成PNG图像的信息, 信息内容包括尺寸, 位深度,颜色类型,是否交错, 换行等等,按照格式逐个填写就行了

6:写入实际的RGB数据到绑定好的png_structp结构体

7:写入文件尾部信息

8:清理工作 (释放申请的内存, 注销png_structp结构体)

代码如下 :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <png.h>


#de
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值