c语言libjpeg处理图像,CCS+C6678LE开发记录05:编译并使用开源JPEG图像(解)压缩库libjpeg...

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

[复制链接]

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

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

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

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

a9b0c5778e0fc8e407a0becc9077f4b9.gif

libjpeg_src.zip

(256.12 KB, 下载次数: 80)

2015-10-29 10:41 上传

点击文件名下载附件

然后打开CCS新建项目

a26d678767e8b431ecd7a25f1936bdc5.gif

1.png (45.51 KB, 下载次数: 2)

2015-10-29 10:42 上传

a26d678767e8b431ecd7a25f1936bdc5.gif

2.png (48.77 KB, 下载次数: 1)

2015-10-29 10:42 上传

设置目标平台为TMS320C6678

项目名称libjpeg

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

选择Output type为Static Library

a26d678767e8b431ecd7a25f1936bdc5.gif

3.png (57.02 KB, 下载次数: 1)

2015-10-29 10:42 上传

项目模板为Empty Project

a26d678767e8b431ecd7a25f1936bdc5.gif

4.png (28.91 KB, 下载次数: 1)

2015-10-29 10:43 上传

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

a26d678767e8b431ecd7a25f1936bdc5.gif

5.png (19.69 KB, 下载次数: 1)

2015-10-29 10:43 上传

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

a26d678767e8b431ecd7a25f1936bdc5.gif

6.png (30.27 KB, 下载次数: 1)

2015-10-29 10:43 上传

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

a26d678767e8b431ecd7a25f1936bdc5.gif

7.png (31.45 KB, 下载次数: 0)

2015-10-29 10:43 上传

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

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

a26d678767e8b431ecd7a25f1936bdc5.gif

8.png (85.33 KB, 下载次数: 0)

2015-10-29 10:43 上传

选择Release并【Set Active】

a26d678767e8b431ecd7a25f1936bdc5.gif

9.png (32.99 KB, 下载次数: 0)

2015-10-29 10:43 上传

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

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

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

下面给出一个应用示例

新建项目

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

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

a26d678767e8b431ecd7a25f1936bdc5.gif

10.png (95.06 KB, 下载次数: 1)

2015-10-29 10:43 上传

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

a26d678767e8b431ecd7a25f1936bdc5.gif

11.png (43.49 KB, 下载次数: 1)

2015-10-29 10:43 上传然后确定

a26d678767e8b431ecd7a25f1936bdc5.gif

12.png (33.7 KB, 下载次数: 1)

2015-10-29 10:43 上传

接下来贴上示例的源代码main.c

#include

#include

#include "jpeglib.h"

typedef unsigned char BYTE;

int main(void)

{

char* szFileName = "F:\\Images\\Snapshot\\000.jpg";

struct jpeg_decompress_struct cinfo;

struct jpeg_error_mgr jerr;

// STEP 1: StdError

printf("\n-----------------------------------\n");

cinfo.err = jpeg_std_error(&jerr);

// STEP 2: Create

printf("Create decompress information.\n");

jpeg_create_decompress(&cinfo);

FILE* pf = fopen(szFileName, "rb");

if (pf != NULL)

{

// STEP 3: IO

printf("Attach input file.\n");

jpeg_stdio_src(&cinfo, pf);

// STEP 4: Header

printf("Read header information.\n");

jpeg_read_header(&cinfo, TRUE);

long width=cinfo.image_width;

long height=cinfo.image_height;

long channels=cinfo.num_components;

printf("Image size information:\n%d*%d*%d(width*height*channel)\n",width,height,channels);

long bytes = width*height*channels;

printf("Allocate %d bytes memory:",bytes);

BYTE* data = (BYTE*)malloc(bytes);

int line=0;

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

printf("Scan lines...\n");

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);

++line;

if(line%100==0)

{

printf("Current line: %03d\n",line);

}

}

// STEP 7: Finish

jpeg_finish_decompress(&cinfo);

printf("Decompression finished.\n");

// Do something with

// BYTE data[] here

// and then release it

free(data);

}

else

{

printf("FAILED.\n");

}

// STEP 8: Destroy

jpeg_destroy_decompress(&cinfo);

fclose(pf);

}

else

{

printf("Failed to open \'%s\'\n", szFileName);

}

printf("Test PASSED.\n");

return 0;

}复制代码运行时输出截图如下

a26d678767e8b431ecd7a25f1936bdc5.gif

1.jpg (40.13 KB, 下载次数: 3)

2015-10-29 10:44 上传

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值