5627
- 收藏
- 点赞
- 分享
- 举报
图像无损压缩——zlib使用笔记
其实就是通用数据的压缩,不过恰巧用在了这里。很多时候,希望保留尽量多的图像细节,通过网络或USB传输到PC进行处理,就要用到无损压缩。
贴一下主要函数:
[quote](1)int compress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);
把源缓冲压缩成目的缓冲, 就那么简单, 一个函数搞定
(2) int compress2 (Bytef *dest, uLongf *destLen,const Bytef *source, uLong sourceLen,int level);
功能和上一个函数一样,都一个参数可以指定压缩质量和压缩数度之间的关系(0-9)不敢肯定这个参数的话不用太在意它,明白一个道理就好了: 要想得到高的压缩比就要多花时间
(3) uLong compressBound (uLong sourceLen);
计算需要的缓冲区长度. 假设你在压缩之前就想知道你的产度为 sourcelen 的数据压缩后有多大, 可调用这个函数计算一下,这个函数并不能得到精确的结果,但是它可以保证实际输出长度肯定小于它计算出来的长度
(4) int uncompress (Bytef *dest, uLongf *destLen,const Bytef *source, uLong sourceLen);[/quote]
下载zlib1.2.8后,将顶层文件夹中所有c和h文件拷贝到visual studio工程中
添加所有c文件到工程中
然后编写如下代码:
[code]/* author:9crk 2014-12-14*/
#include "stdio.h"
#include "zlib/zconf.h"
#include "zlib/zlib.h"
int main()
{
//原始数据
Bytef myData[10000];
//压缩后
Bytef outPut[10000];
//解压后
Bytef uncompressData[20000];
//初始化待压缩数据
for(int k=0;k<10000;k++)myData[k] = k%255;
uLongf i=10000;//严重注意,这个必须初始化为output的大小(或者比较大的一个数)
int ret = compress(outPut, &i, myData,(uLongf)10000);
printf("ret = %d, i = %d\n",ret, i);
uLongf j=20000;//注意这个必须是uncompressData的大小(或者比较大的一个数)
ret = uncompress(uncompressData, &j, outPut, i);
printf("ret = %d, j = %d\n",ret, j);
printf("finished\n");
}[/code]
注意文中的汉字说明,否则compress和uncompress函数都会返回-5.
运行结果:
ret = 0, i = 368
ret = 0, j = 10000
finished
请按任意键继续. . .
贴一下主要函数:
[quote](1)int compress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);
把源缓冲压缩成目的缓冲, 就那么简单, 一个函数搞定
(2) int compress2 (Bytef *dest, uLongf *destLen,const Bytef *source, uLong sourceLen,int level);
功能和上一个函数一样,都一个参数可以指定压缩质量和压缩数度之间的关系(0-9)不敢肯定这个参数的话不用太在意它,明白一个道理就好了: 要想得到高的压缩比就要多花时间
(3) uLong compressBound (uLong sourceLen);
计算需要的缓冲区长度. 假设你在压缩之前就想知道你的产度为 sourcelen 的数据压缩后有多大, 可调用这个函数计算一下,这个函数并不能得到精确的结果,但是它可以保证实际输出长度肯定小于它计算出来的长度
(4) int uncompress (Bytef *dest, uLongf *destLen,const Bytef *source, uLong sourceLen);[/quote]
下载zlib1.2.8后,将顶层文件夹中所有c和h文件拷贝到visual studio工程中
添加所有c文件到工程中
然后编写如下代码:
[code]/* author:9crk 2014-12-14*/
#include "stdio.h"
#include "zlib/zconf.h"
#include "zlib/zlib.h"
int main()
{
//原始数据
Bytef myData[10000];
//压缩后
Bytef outPut[10000];
//解压后
Bytef uncompressData[20000];
//初始化待压缩数据
for(int k=0;k<10000;k++)myData[k] = k%255;
uLongf i=10000;//严重注意,这个必须初始化为output的大小(或者比较大的一个数)
int ret = compress(outPut, &i, myData,(uLongf)10000);
printf("ret = %d, i = %d\n",ret, i);
uLongf j=20000;//注意这个必须是uncompressData的大小(或者比较大的一个数)
ret = uncompress(uncompressData, &j, outPut, i);
printf("ret = %d, j = %d\n",ret, j);
printf("finished\n");
}[/code]
注意文中的汉字说明,否则compress和uncompress函数都会返回-5.
运行结果:
ret = 0, i = 368
ret = 0, j = 10000
finished
请按任意键继续. . .
我来回答
回答5个
时间排序
认可量排序
认可0
认可0
认可0
认可0
认可0
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2015-01-05 10:30:27
-
2008-07-31 01:34:37
-
2018-09-12 08:06:30
-
2013-08-25 11:25:25
-
2018-09-08 11:23:01
-
02018-12-07 11:13:15
-
2012-11-27 20:39:59
-
2020-10-09 17:17:00
-
2019-01-22 16:14:15
-
02018-10-17 17:13:23
-
2019-07-15 19:56:41
-
2013-08-29 15:08:54
-
02018-12-19 16:17:42
-
2020-02-20 15:46:33
-
02018-12-13 11:19:09
-
02018-12-18 10:03:03
-
02018-12-18 10:00:30
-
2018-12-14 10:14:00
-
2021-01-19 16:45:02
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认