使用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;
}

github

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏帘卷西风的专栏

关于cocos2dx中文转UTF8码的解决方案

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)

813
来自专栏NetCore

[实录]解决Migrator.Net 小bug

好久没写了,平时比较忙,只能趁周末的时候,写一点小东西,自己也记录一下。 平时我们做项目的时候,都会有自己的数据访问层,为了能方便以后的升级,我们一般会抽象出数...

1985
来自专栏非著名程序员

Android面试系列之应用内多语言切换

昨天组里的同事遇到一些切换多语言的细节问题,发现在Android N版本上配置应用内多语言没有生效,正好拿出来做为一个面试题讲解一下。 面试题:如何实现应用内多...

29410
来自专栏FreeBuf

逆向APK进行smali注入实现“秒破WIFI”

近期开始关注手机安全了,以往都是在PC上玩,对这个领域也想了解一下,可是拿什么来开刀呢?突然想起Wifi万能钥匙这个神器了,这个软件的wifi分享模式鄙人非常喜...

2206
来自专栏逆向技术

逆向实战干货,植物大战僵尸快速定位自动捡阳光Call,或者标志

             逆向实战干货,快速定位自动捡阳光Call,或者标志 注意: 关于CE和OD的使用,这里不再多说,快速定位,默认大家已经有了CE基础,或...

2129
来自专栏吴小龙同學

Kotlin for Android(一)准备工作

从零开始,对比 Kotlin 与 Java,差异化学习 ,循序渐进。工欲善其事,必先利其器,有了 Kotlin 的 IDE,才能更好地进行下一步。 Kot...

34711
来自专栏自然语言处理

数据分析:基于Python的自定义文件格式转换系统

无论读者现在是做数据挖掘、数据分析、自然语言处理、智能对话系统、商品推荐系统等等,都不可避免的涉及语料的问题即大数据。数据来源无非分为结构化数据、...

1182
来自专栏互联网杂技

如何学习用Typescript写Reactjs?

首先扫盲一下,先从搭建环境开始: 1.安装node,因为ts的编译器是js/ts写的; 安装node后同时获得npm命令,这是nodejs世界里的包管理器...

44812
来自专栏大史住在大前端

一统江湖的大前端(5)editorconfig + eslint——你的代码里藏着你的优雅

各种命名风格,各种冗余代码,各种缩进风格,各种奇葩注释和各种没有注释,眼中有码,心中无码,只有心累两个字,项目的整洁度会受到很多客观因素的影响,为了自己的身心健...

1273
来自专栏思考的代码世界

Python网络数据采集之读取文件|第05天

文档编码的方式通常可以根据文件的扩展名进行判断,虽然文件扩展名并不是由编码确定的,而是由开发者确定的。从最底层的角度看,所有文档都是由 0和 1 编码而成的。例...

3274

扫码关注云+社区