113 lines
4.2 KiB
C
113 lines
4.2 KiB
C
#ifndef __BMP_H__
|
||
#define __BMP_H__
|
||
#include "base.h"
|
||
//////////////////////////////////////////////////////////////////////////////////
|
||
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
|
||
//ALIENTEK STM32F407开发板
|
||
//图片解码 驱动代码-bmp解码部分
|
||
//正点原子@ALIENTEK
|
||
//技术论坛:www.openedv.com
|
||
//创建日期:2014/5/15
|
||
//版本:V1.0
|
||
//版权所有,盗版必究。
|
||
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
|
||
//All rights reserved
|
||
//********************************************************************************
|
||
//升级说明
|
||
//V1.1 20140722
|
||
//修改minibmp_decode函数,使图片在设定区域的正中央显示
|
||
//////////////////////////////////////////////////////////////////////////////////
|
||
|
||
//////////////////////////////////////////用户配置区///////////////////////////////
|
||
#define BMP_USE_MALLOC 1 //定义是否使用malloc,这里我们选择使用malloc
|
||
#define BMP_DBUF_SIZE 2048 //定义bmp解码数组的大小(最少应为LCD宽度*3)
|
||
//////////////////////////////////////////////END/////////////////////////////////
|
||
|
||
//BMP信息头
|
||
typedef __packed struct
|
||
{
|
||
u32 biSize ; //说明BITMAPINFOHEADER结构所需要的字数。
|
||
long biWidth ; //说明图象的宽度,以象素为单位
|
||
long biHeight ; //说明图象的高度,以象素为单位
|
||
u16 biPlanes ; //为目标设备说明位面数,其值将总是被设为1
|
||
u16 biBitCount ; //说明比特数/象素,其值为1、4、8、16、24、或32
|
||
u32 biCompression ; //说明图象数据压缩的类型。其值可以是下述值之一:
|
||
//BI_RGB:没有压缩;
|
||
//BI_RLE8:每个象素8比特的RLE压缩编码,压缩格式由2字节组成(重复象素计数和颜色索引);
|
||
//BI_RLE4:每个象素4比特的RLE压缩编码,压缩格式由2字节组成
|
||
//BI_BITFIELDS:每个象素的比特由指定的掩码决定。
|
||
u32 biSizeImage ; //说明图象的大小,以字节为单位。当用BI_RGB格式时,可设置为0
|
||
long biXPelsPerMeter ; //说明水平分辨率,用象素/米表示
|
||
long biYPelsPerMeter ; //说明垂直分辨率,用象素/米表示
|
||
u32 biClrUsed ; //说明位图实际使用的彩色表中的颜色索引数
|
||
u32 biClrImportant ; //说明对图象显示有重要影响的颜色索引的数目,如果是0,表示都重要。
|
||
}BITMAPINFOHEADER ;
|
||
//BMP头文件
|
||
typedef __packed struct
|
||
{
|
||
u16 bfType ; //文件标志.只对'BM',用来识别BMP位图类型
|
||
u32 bfSize ; //文件大小,占四个字节
|
||
u16 bfReserved1 ;//保留
|
||
u16 bfReserved2 ;//保留
|
||
u32 bfOffBits ; //从文件开始到位图数据(bitmap data)开始之间的的偏移量
|
||
}BITMAPFILEHEADER ;
|
||
//彩色表
|
||
typedef __packed struct
|
||
{
|
||
u8 rgbBlue ; //指定蓝色强度
|
||
u8 rgbGreen ; //指定绿色强度
|
||
u8 rgbRed ; //指定红色强度
|
||
u8 rgbReserved ;//保留,设置为0
|
||
}RGBQUAD ;
|
||
//位图信息头
|
||
typedef __packed struct
|
||
{
|
||
BITMAPFILEHEADER bmfHeader;
|
||
BITMAPINFOHEADER bmiHeader;
|
||
u32 RGB_MASK[3]; //调色板用于存放RGB掩码.
|
||
//RGBQUAD bmiColors[256];
|
||
}BITMAPINFO;
|
||
typedef RGBQUAD * LPRGBQUAD;//彩色表
|
||
|
||
//图象数据压缩的类型
|
||
#define BI_RGB 0 //没有压缩.RGB 5,5,5.
|
||
#define BI_RLE8 1 //每个象素8比特的RLE压缩编码,压缩格式由2字节组成(重复象素计数和颜色索引);
|
||
#define BI_RLE4 2 //每个象素4比特的RLE压缩编码,压缩格式由2字节组成
|
||
#define BI_BITFIELDS 3 //每个象素的比特由指定的掩码决定。
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
typedef struct
|
||
{
|
||
int x_size;
|
||
int y_size;
|
||
u16 *data;
|
||
}BMP_DecodeStruct;
|
||
|
||
|
||
|
||
|
||
int BMP_Decode(const u8 *filename,BMP_DecodeStruct *bmp) ;
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
//BMP编解码函数
|
||
u8 stdbmp_decode(const u8 *filename);
|
||
u8 minibmp_decode(u8 *filename,u16 x,u16 y,u16 width,u16 height,u16 acolor,u8 mode);//尺寸小于240*320的bmp图片解码.
|
||
u8 bmp_encode(u8 *filename,u16 x,u16 y,u16 width,u16 height,u8 mode);
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
#endif
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|