⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bmp.h

📁 STM32不完全手册 例程源码 29个
💻 H
字号:
#ifndef __BMP_H__
#define __BMP_H__
#include "sys.h"
#include "fat.h"
//BMP信息头
typedef __packed struct
{
    DWORD biSize ;		   //说明BITMAPINFOHEADER结构所需要的字数。
    LONG  biWidth ;		   //说明图象的宽度,以象素为单位 
    LONG  biHeight ;	   //说明图象的高度,以象素为单位 
    WORD  biPlanes ;	   //为目标设备说明位面数,其值将总是被设为1 
    WORD  biBitCount ;	   //说明比特数/象素,其值为1、4、8、16、24、或32
    DWORD biCompression ;  //说明图象数据压缩的类型。其值可以是下述值之一:
	//BI_RGB:没有压缩;
	//BI_RLE8:每个象素8比特的RLE压缩编码,压缩格式由2字节组成(重复象素计数和颜色索引);  
    //BI_RLE4:每个象素4比特的RLE压缩编码,压缩格式由2字节组成
  	//BI_BITFIELDS:每个象素的比特由指定的掩码决定。
    DWORD biSizeImage ;//说明图象的大小,以字节为单位。当用BI_RGB格式时,可设置为0  
    LONG  biXPelsPerMeter ;//说明水平分辨率,用象素/米表示
    LONG  biYPelsPerMeter ;//说明垂直分辨率,用象素/米表示
    DWORD biClrUsed ;	   //说明位图实际使用的彩色表中的颜色索引数
    DWORD biClrImportant ; //说明对图象显示有重要影响的颜色索引的数目,如果是0,表示都重要。 
}BITMAPINFOHEADER ;
//BMP头文件
typedef __packed struct
{
    WORD  bfType ;     //文件标志.只对'BM',用来识别BMP位图类型
    DWORD bfSize ;	   //文件大小,占四个字节
    WORD  bfReserved1 ;//保留
    WORD  bfReserved2 ;//保留
    DWORD bfOffBits ;  //从文件开始到位图数据(bitmap data)开始之间的的偏移量
}BITMAPFILEHEADER ;
//彩色表 
typedef __packed struct 
{
    BYTE rgbBlue ;    //指定蓝色强度
    BYTE rgbGreen ;	  //指定绿色强度 
    BYTE rgbRed ;	  //指定红色强度 
    BYTE rgbReserved ;//保留,设置为0 
}RGBQUAD ;
//位图信息头
typedef __packed struct
{ 
	BITMAPFILEHEADER bmfHeader;
	BITMAPINFOHEADER bmiHeader;  
	//RGBQUAD bmiColors[256];  
}BITMAPINFO; 

typedef RGBQUAD * LPRGBQUAD;//彩色表  

//图象数据压缩的类型
#define BI_RGB       0L
#define BI_RLE8      1L
#define BI_RLE4      2L
#define BI_BITFIELDS 3L 

#define M_SOF0  0xc0
#define M_DHT   0xc4
#define M_EOI   0xd9
#define M_SOS   0xda
#define M_DQT   0xdb
#define M_DRI   0xdd
#define M_APP0  0xe0  	  
//反Z字形编码表
const int Zig_Zag[8][8]={{0,1,5,6,14,15,27,28},
					  	  {2,4,7,13,16,26,29,42},
						  {3,8,12,17,25,30,41,43},
						  {9,11,18,24,31,40,44,53},
						  {10,19,23,32,39,45,52,54},
						  {20,22,33,38,46,51,55,60},
						  {21,34,37,47,50,56,59,61},
						  {35,36,48,49,57,58,62,63}
						 };
const BYTE And[9]={0,1,3,7,0xf,0x1f,0x3f,0x7f,0xff};

#define W1 2841 /* 2048*sqrt(2)*cos(1*pi/16) */
#define W2 2676 /* 2048*sqrt(2)*cos(2*pi/16) */
#define W3 2408 /* 2048*sqrt(2)*cos(3*pi/16) */
#define W5 1609 /* 2048*sqrt(2)*cos(5*pi/16) */
#define W6 1108 /* 2048*sqrt(2)*cos(6*pi/16) */
#define W7 565  /* 2048*sqrt(2)*cos(7*pi/16) */
												 
	  					    		  
#define MAKEWORD(a, b)      ((WORD)(((BYTE)(a)) | ((WORD)((BYTE)(b))) << 8))
#define MAKELONG(a, b)      ((LONG)(((WORD)(a)) | ((DWORD)((WORD)(b))) << 16))
#define LOWORD(l)           ((WORD)(l))
#define HIWORD(l)           ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
#define LOBYTE(w)           ((BYTE)(w))
#define HIBYTE(w)           ((BYTE)(((WORD)(w) >> 8) & 0xFF))
	   
//宏定义					   
#define WIDTHBYTES(i)    ((i+31)/32*4)//??????????
#define PI 3.1415926535
//函数返回值定义
#define FUNC_OK 0
#define FUNC_MEMORY_ERROR 1
#define FUNC_FILE_ERROR 2
#define FUNC_FORMAT_ERROR 3
//用到的外部参数
//extern FileInfoStruct F_Info[8];//文件结构体
//extern unsigned int POINT_COLOR;//画笔颜色				       
//////////////////////////////////////////////////
//BMP解码函数
BOOL BmpDecode(FileInfoStruct *BmpFileName);
//////////////////////////////////////////////////
//JPEG 解码函数				 
int  InitTag(void);
void InitTable(void);						   //初始化数据表
int  Decode(void);							   //解码
int  DecodeMCUBlock(void);
int  HufBlock(BYTE dchufindex,BYTE achufindex);//哈夫曼解码
int  DecodeElement(void);					   //解码一个像素
void IQtIZzMCUComponent(short flag);		   //反量化
void IQtIZzBlock(short  *s ,short * d,short flag);
void GetYUV(short flag);		 //色彩转换的实现,得到色彩空间数据
void StoreBuffer(void);

BYTE ReadByte(void);             //从文件里面读取一个字节出来
void Initialize_Fast_IDCT(void); //初始化反离散傅立叶变换
void Fast_IDCT(int * block);	 //快速反离散傅立叶变换
void idctrow(int * blk);
void idctcol(int * blk);  
////对缓冲区数据进行移动处理,使操作SD卡就像操作sram一样
unsigned int P_Cal(unsigned char*pc);		    
#endif








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -