打印
[DSP]

CCS+C6678LE开发记录05:编译并使用开源JPEG图像(解)压缩库libjpeg

[复制链接]
900|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

上次解决了BMP图片读取的问题,这一次想解决读取JPEG图片的问题,本来打算自己新造一个轮子的,

但是既然已经有了libjpeg为何不尝试移植呢?话说这次真的移植成功了!

废话不多说,就列出具体步骤吧。

首先是准备libjpeg的源码(删除所有不必要的文件),我这里有一份整理好的源码压缩包,下载链接

http://download.csdn.net/detail/von_ryan_hack/8317245

然后打开CCS新建项目





设置目标平台为TMS320C6678

项目名称libjpeg

点击[ Next > ] 弹出对话框,展开[ Advanced Settings ]

选择Output type为Static Library


项目模板为Empty Project



在项目上右键菜单选择添加文件



浏览libjpeg源码文件夹,[Add Files...]添加文件(全选)



提示,选择【复制文件】即可



编译类型默认为Debug,如需调整,可在项目右键设置

或者打开设置对话框,选择 [Manage Configurations...]



选择Release并【Set Active】



接下来执行[Project]-->[Build All]即可

编译完成后请将输出文件夹(Debug或Release文件夹)下的libjpeg.lib

和jconfig.h   jmorecfg.h   jpeglib.h这写文件拷贝出来以供其他项目使用。


下面给出一个应用示例

新建项目(可参考这篇**http://blog.csdn.net/fengyhack/article/details/41945029

设置的时候注意添加libjpeg.lib以及jconfig.h; jmorecfg.h; jpeglib.h这几个文件

添加文件后,打开项目属性设置对话框



浏览Workspace选择刚才添加的libjpeg.lib文件


然后确定




使用特权

评论回复

相关帖子

沙发
zhangmangui|  楼主 | 2020-10-22 21:09 | 只看该作者

首先解释以下两个名词(仅供参考,可跳过)

JPEG=Joint Photographic Experts Group(联合图像专家小组),是第一个国际图像压缩标准。JPEG图像压缩算法能够在提供良好的压缩性能的同时,具有比较好的重建质量,被广泛应用于图像、视频处理领域。人们日常碰到的.jpeg,.jpg等指代的是图像数据经压缩编码后在媒体上的封存形式,不能与JPEG压缩标准混为一谈。(百度百科

IJG is an informal group that writes and distributes a widely used free library for JPEG image compression. The first version was released on 7-Oct-1991. (http://www.ijg.org/)


本文将关注IJG提供的JPEG图像压缩/解压缩库的编译与初步使用。

首先在IJG网站http://www.ijg.org/下载源代码,此文编辑时已发布的版本为version 9a


编译

我们将要在Visual Studio 2010环境下编译,编译目标为libjpeg.lib


1、下载jpegsrc9a.zip并解压

2、复制jconfig.vc文件内容到新建文件jconfig.h





3、编辑Makefile.vc文件内容


其中.mak文件路径可能会因机器配置等原因而不一样

     

以上截图中是测试机器(Windows 7 专业版 64位)上的文件路径

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\Win32.Mak


4、编译

开始菜单-->VS2010工具-->VS命令提示



切换到源码所在目录



键入命令 nmake /f makefile.vc nodebug=1

其中nodebug开关(=1打开)表示以release模式编译


数秒之后,编译完成



生成目标为libjpeg.lib



5、使用

拷贝以下4个文件


其中jconfig.h是第2步骤中修改的,jmorecfg.h是一些较为详细的配置,jpeglib.h是库引用声明

在使用时,将以上头文件和库文件添加到工程即可。


示例

以下是一个简单的JPEG文件读取(解压)示例


使用特权

评论回复
板凳
zhangmangui|  楼主 | 2020-10-22 21:10 | 只看该作者
本帖最后由 zhangmangui 于 2020-10-22 21:11 编辑

#include <stdio.h>
#include "jpeglib.h"
#pragma comment(lib,"libjpeg.lib")
#pragma warning(disable:4996)

typedef unsigned char BYTE;

int main(void)
{
        printf("Input jpeg file path:");
        char szFileName[256] = { 0 };
        scanf("%s", szFileName);

        jpeg_decompress_struct cinfo;
        jpeg_error_mgr jerr;

        // STEP 1: StdError
        cinfo.err = jpeg_std_error(&jerr);

        // STEP 2: Create
        jpeg_create_decompress(&cinfo);

        FILE* pf = fopen(szFileName, "rb");
        if (pf != NULL)
        {
                // STEP 3: IO
                jpeg_stdio_src(&cinfo, pf);

                // STEP 4: Header
                jpeg_read_header(&cinfo, TRUE);
               
                long bytes = cinfo.image_width*cinfo.image_height*cinfo.num_components;
                printf("Allocate %d bytes memory:",bytes);
                BYTE* data = new BYTE[bytes];
                if (data != NULL)
                {
                        printf("OK.\nPrepare to decompress the image...\n");
                       
                        // STEP 5: Start
                        jpeg_start_decompress(&cinfo);
                        JSAMPROW row_pointer[1];

                        // STEP 6: ReadScan
                        while (cinfo.output_scanline < cinfo.output_height)
                        {
                                row_pointer[0] = &data[(cinfo.output_height - cinfo.output_scanline - 1)*cinfo.image_width*cinfo.num_components];
                                jpeg_read_scanlines(&cinfo, row_pointer, 1);
                        }

                        // STEP 7: Finish
                        jpeg_finish_decompress(&cinfo);
                        // Do something with
                        // BYTE data[] here
                        // and then release it
                        delete[] data;
                }
                else
                {
                        printf("FAILED.\n");
                }

                // STEP 8: Destroy
                jpeg_destroy_decompress(&cinfo);
                fclose(pf);

                printf("JPEG decompression finished.\n");
        }
        else
        {
                printf("Failed to open \'%s\'\n", szFileName);
        }

        printf("Press ENTER to continue...");
        getchar();
        getchar();
        return 0;
}

使用特权

评论回复
地板
zhangmangui|  楼主 | 2020-10-22 21:12 | 只看该作者

使用特权

评论回复
5
欢乐家园| | 2020-10-23 15:00 | 只看该作者
C盘满了,看来总是下载到桌面的坏处就是这个。。。用的时候地方不够了。。

使用特权

评论回复
6
欢乐家园| | 2020-10-23 15:03 | 只看该作者

使用特权

评论回复
7
dirtwillfly| | 2020-10-24 21:21 | 只看该作者
楼主有没有便宜点的C6678板子推荐?

使用特权

评论回复
8
zhangmangui|  楼主 | 2020-10-25 21:26 | 只看该作者
dirtwillfly 发表于 2020-10-24 21:21
楼主有没有便宜点的C6678板子推荐?

二手的吧    创龙的搞活动时会比较便宜的

使用特权

评论回复
评论
dirtwillfly 2020-10-26 09:03 回复TA
好的 
9
八层楼| | 2020-11-11 14:40 | 只看该作者
图片显示的 我很喜欢

使用特权

评论回复
10
观海| | 2020-11-11 14:42 | 只看该作者
两种格式的图片读取原理不一样吗

使用特权

评论回复
11
guanjiaer| | 2020-11-11 14:44 | 只看该作者
一般这块电路板多少钱啊

使用特权

评论回复
12
heimaojingzhang| | 2020-11-11 14:48 | 只看该作者
什么叫开源的图片啊

使用特权

评论回复
13
keaibukelian| | 2020-11-11 14:52 | 只看该作者
感觉过程有些复杂

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎进入【TI DSP 论坛】 & 【DSP 技术】           TI忠诚粉丝!

935

主题

26376

帖子

589

粉丝