使用Jpeglib
时间:2022-05-03
本文章向大家介绍使用Jpeglib,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/*******************************************************************
* Copyright(c) 2017
* All rights reserved.
*
* 文件名称: Jpeg.cpp
* 简要描述: 使用Jpeglib
*
* 创建日期: 2017-08-14
* 作者: gongluck
* 说明:
*
* 修改日期:
* 作者:
* 说明:
******************************************************************/
#include "Jpeg.h"
int DecodeJpeg2Bmp(const char* filename,void* outbuf,int bufsize,int* nBits,int* width,int* height)
{
if(filename == NULL)
return -1;
//声明并初始化解压缩对象,同时制定错误信息管理器
jpeg_decompress_struct cinfo = {0};
jpeg_error_mgr error = {0};
cinfo.err = jpeg_std_error(&error);
jpeg_create_decompress(&cinfo);
//打开jpg图像文件,并指定为解压缩对象的源文件
FILE* finput = fopen(filename,"rb");
if(finput == NULL)
return -2;
jpeg_stdio_src(&cinfo,finput);
//读取图像信息
jpeg_read_header(&cinfo,TRUE);
//根据图像信息申请一个图像缓冲区
if(outbuf == NULL)
{
*nBits = cinfo.num_components * 8;
*width = cinfo.image_width;
*height = cinfo.image_height;
jpeg_destroy_decompress(&cinfo);
fclose(finput);
return sizeof(BYTE)*cinfo.image_width*(cinfo.image_height+1)*cinfo.num_components;
}
JSAMPROW data = (JSAMPROW)outbuf;
//开始解压缩
jpeg_start_decompress(&cinfo);
JSAMPROW row_pointer[1];
while (cinfo.output_scanline < cinfo.output_height)
{
row_pointer[0] = &data[(cinfo.output_scanline)*cinfo.image_width*cinfo.num_components];
jpeg_read_scanlines(&cinfo,row_pointer ,1);
}
jpeg_finish_decompress(&cinfo);
//释放资源
jpeg_destroy_decompress(&cinfo);
fclose(finput);
return 0;
}
- HDU 3480 Division
- 小白博客 Xiaobai___详细教你如何在Linux环境下安装mysql数据库
- 3856: Monster
- BZOJ4753: [Jsoi2016]最佳团体
- 3101: N皇后
- 算法模板——线性欧拉函数
- jdbc基础 (一) MySQL的简单使用
- 小白博客 爆破内网mysql数据库root密码脚本代码
- 2818: Gcd
- 1688: [Usaco2005 Open]Disease Manangement 疾病管理
- 通过MySQL自动同步刷新Redis
- 13.MySQL(一) 数据库简介mysql安装数据库操作Mysql数据类型存储引擎
- 3314: [Usaco2013 Nov]Crowded Cows
- BZOJ4766: 文艺计算姬
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Canvas系列(5):绘制文字
- 详解Keepalived安装与配置
- Redis数据结构-字典
- 编程体系结构(07):JavaEE之Web开发
- Centos 6.5环境实现本地局域网搭建YUM的方法【基于HTTP】
- Doug Lea在J.U.C包里面写的BUG又被网友发现了。
- CentOs 7.*中配置安装phpMyAdmin的完整步骤记录
- Linux中怎么通过PID号找到对应的进程名及所在目录方法
- Apache环境下配置多个ssl证书搭建多个站点的方法
- 详解Linux手动释放缓存的方法
- 详解Centos7源码编译安装 php7.2之生产篇
- Centos7利用内存优化磁盘缓存读写速度的方法
- Redis过期策略和数据淘汰机制
- 图片由彩色渐变到黑白动画
- Kafka如何保证数据可靠性