2908|0

19

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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

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

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

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

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

libjpeg_src.zip (256.12 KB, 下载次数: 87)


然后打开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这写文件拷贝出来以供其他项目使用。


下面给出一个应用示例

新建项目

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

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

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

然后确定

接下来贴上示例的源代码main.c
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include "jpeglib.h"  
  4.   
  5. typedef unsigned char BYTE;  
  6.   
  7. int main(void)  
  8. {  
  9.     char* szFileName = "F:\\Images\\Snapshot\\000.jpg";  
  10.   
  11.     struct jpeg_decompress_struct cinfo;  
  12.     struct jpeg_error_mgr jerr;  
  13.   
  14.     // STEP 1: StdError  
  15.     printf("\n-----------------------------------\n");  
  16.     cinfo.err = jpeg_std_error(&jerr);  
  17.   
  18.     // STEP 2: Create  
  19.     printf("Create decompress information.\n");  
  20.     jpeg_create_decompress(&cinfo);  
  21.   
  22.     FILE* pf = fopen(szFileName, "rb");  
  23.     if (pf != NULL)  
  24.     {  
  25.         // STEP 3: IO  
  26.         printf("Attach input file.\n");  
  27.         jpeg_stdio_src(&cinfo, pf);  
  28.   
  29.         // STEP 4: Header  
  30.         printf("Read header information.\n");  
  31.         jpeg_read_header(&cinfo, TRUE);  
  32.   
  33.         long width=cinfo.image_width;  
  34.         long height=cinfo.image_height;  
  35.         long channels=cinfo.num_components;  
  36.         printf("Image size information:\n%d*%d*%d(width*height*channel)\n",width,height,channels);  
  37.   
  38.         long bytes = width*height*channels;  
  39.         printf("Allocate %d bytes memory:",bytes);  
  40.         BYTE* data = (BYTE*)malloc(bytes);  
  41.         int line=0;  
  42.         if (data != NULL)  
  43.         {  
  44.             printf("OK.\nPrepare to decompress the image...\n");  
  45.   
  46.             // STEP 5: Start  
  47.             jpeg_start_decompress(&cinfo);  
  48.             JSAMPROW row_pointer[1];  
  49.   
  50.             // STEP 6: ReadScan  
  51.             printf("Scan lines...\n");  
  52.             while (cinfo.output_scanline < cinfo.output_height)  
  53.             {  
  54.                 row_pointer[0] = &data[(cinfo.output_height - cinfo.output_scanline - 1)*cinfo.image_width*cinfo.num_components];  
  55.                 jpeg_read_scanlines(&cinfo, row_pointer, 1);  
  56.                 ++line;  
  57.                 if(line%100==0)  
  58.                 {  
  59.                     printf("Current line: %03d\n",line);  
  60.                 }  
  61.             }  
  62.   
  63.             // STEP 7: Finish  
  64.             jpeg_finish_decompress(&cinfo);  
  65.             printf("Decompression finished.\n");  
  66.             // Do something with  
  67.             // BYTE data[] here  
  68.             // and then release it  
  69.             free(data);  
  70.         }  
  71.         else  
  72.         {  
  73.             printf("FAILED.\n");  
  74.         }  
  75.   
  76.         // STEP 8: Destroy  
  77.         jpeg_destroy_decompress(&cinfo);  
  78.         fclose(pf);  
  79.     }  
  80.     else  
  81.     {  
  82.         printf("Failed to open \'%s\'\n", szFileName);  
  83.     }  
  84.   
  85.     printf("Test PASSED.\n");  
  86.     return 0;  
  87. }  
复制代码
运行时输出截图如下



点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表