TI DSP TMS320C66x学习笔记之TI官方读BMP程序(一)

这篇博客介绍了作者在学习TMS320C6657 DSP过程中对TI官方提供的BMP图像读取代码的研究。文章分享了TI的在线学习资源,包括TI Wiki、德州仪器在线支持社区和TI E2E Community,并提供了源代码的入口。博主详细分析了mcip_bmp_utils.c和mcip_bmp_utils.h文件,特别是BMP图像文件头定义和raw_image_data_t结构体,强调了该结构体设计的灵活性和通用性,使其可用于不同数据获取方式。
摘要由CSDN通过智能技术生成

    一直想认真写一下关于DSP的学习笔记,但是由于时间和惰性,徘徊许久,都没能提笔,趁着系统学习TMS320C6657的机会,在此开博,用于对自己学习的总结,也希望能跟大家分享学习心得,相互交流共同进步。

    博客暂时是以自己学习过程为次序,将觉得有必要拿出来分享的经验贴出来,才疏学浅,有错误,请大家不吝赐教。

    TI可以说是很厚道的一家芯片公司,大量的代码和文档给大家学习深入带来了很大方便,但也正因为资料繁多,新手往往不知从何下手。现在提供几个在线学习的网站,大部分问题都可以在这几个网站得到解决。

    首先推荐TI wiki几乎所有的文档都可以通过这里一一找到,网址:http://processors.wiki.ti.com/

    其次是德州仪器在线支持社区,可以在上面提问和搜索你遇到的问题,一般提问在1-2个工作日会有TI的支持工程师解答,在此提一下,这里有很多TI支持发出来的源代码可以用于学习,网址:http://www.deyisupport.com/

    最后是TI的英文帮助社区--TI E2E Community,英文比较好的朋友,在此提问会得到更专业的回答,网址:http://e2e.ti.com/

    好了,现在进入今天的主题,TI官方提供的源代码---读BMP图像。

    可以从多核开发套件的图像处理demo文件夹C:\ti\mcsdk_2_01_02_06\demos\image_processing中导入工程,读BMP图像主要是两个文件mcip_bmp_utils.c和mcip_bmp_utils.h,我的代码也是“拿来主义”,大部分与TI源代码相同,只修改部分,以适用自己的需求,期间对代码进行了详细注释,大家可以参考下,理清思路。


   分析程序首先从mcip_bmp_utils.h开始,贴出BMP图像文件头定义,可以参考本博客---图像处理与模式识别分类中----BMP文件结构,即可了解。它对文件头结构体做了很好的划分,分别后续操作。觉得做得最科学的是它设计了一个原始图像数据的结构体raw_image_data_t,这个做法开始我还不太理解,后来发现,有了它可以将文件的获取和文件解码松耦合,使得原始数据可以从通过任何形式进行获取,例如,TCP、摄像头、文件系统中的原始数据,提高了读BMP图像程序模块的通用性,不仅仅限于在CCS进行软仿,而且可以脱离PC机通过TCP、摄像头之类的方式获取原始图像数据,然后进行BMP图像解码。

#ifndef BMP_UTILS_H
#define BMP_UTILS_H

#include <stdint.h>
#include <xdc/runtime/Memory.h>
#include <xdc/runtime/Error.h>

/****************************************************************************/
/*               位图文件头结构体                                           */
/****************************************************************************/
#ifdef _HOST_BUILD
#pragma pack(1)
#endif

typedef struct bmpfile_signature {
  uint8_t signature[2];      /* Signature - 'BM' */
} bmpfile_signature_t;

typedef struct bmpfile_header {
  uint32_t file_size;       /* BMP图像文件的大小 */
  uint16_t reserved1;
  uint16_t reserved2;
  uint32_t bitmap_offset;   /* BMP图像数据的偏移地址 */
} bmpfile_header_t;

typedef struct bmpfile_dib_header {
  uint32_t header_size;    /* 本结构的大小 */
  int32_t  image_width;        /* 位图的宽度 */
  int32_t  image_height;       /* 位图的高度 */
  uint16_t number_of_planes;      /* Number of planes */
  uint16_t bits_per_pixel;       /* 每个像素的位数 */
  uint32_t compression_type;/* 压缩类型 */
  uint32_t image_size;   /* 表示位图数据区域的大小以字节为单位 */
  int32_t  horizontal_resolution;         /* 水平分辨率,单位像素/m */
  int32_t  vertical_resolution;         /* 垂直分辨率,单位像素/m */
  uint32_t number_of_colors;      /* BMP图像使用的颜色,0表示使用全部颜色,对于256色位图来说,此值为100h=256 */
  uint32_t important_color_count;   /* Important color count */
} bmpfile_dib_header_t;

typedef struct bmp_header {
	bmpfile_signature_t  signature;
	bmpfile_header_t     file;
	bmpfile_dib_header_t dib;
} bmp_header_t;

/****************************************************************************/
/*             位图RGB调色板入口结构体                                      */
/****************************************************************************/
typedef struct {
  uint8_t red;
  uint8_t green;
  uint8_t blue;
  uint8_t reserved;
} bmp_color_table_t;
typedef enum {
  BMP_RGB = 0,
  BMP_RLE8,
  BMP_RLE4,
  BMP_BITFIELDS,
  BMP_JPEG,
  BMP_PNG
} bmp
  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值