?? bmp.h
字號:
#ifndef __BMP_H__
#define __BMP_H__
#include "COMM.H"
//BMP信息頭
typedef __packed struct
{
DWORD biSize ; //說明BITMAPINFOHEADER結(jié)構(gòu)所需要的字數(shù)。
LONG biWidth ; //說明圖象的寬度,以象素為單位
LONG biHeight ; //說明圖象的高度,以象素為單位
WORD biPlanes ; //為目標設(shè)備說明位面數(shù),其值將總是被設(shè)為1
WORD biBitCount ; //說明比特數(shù)/象素,其值為1、4、8、16、24、或32
DWORD biCompression ; //說明圖象數(shù)據(jù)壓縮的類型。其值可以是下述值之一:
//BI_RGB:沒有壓縮;
//BI_RLE8:每個象素8比特的RLE壓縮編碼,壓縮格式由2字節(jié)組成(重復象素計數(shù)和顏色索引);
//BI_RLE4:每個象素4比特的RLE壓縮編碼,壓縮格式由2字節(jié)組成
//BI_BITFIELDS:每個象素的比特由指定的掩碼決定。
DWORD biSizeImage ;//說明圖象的大小,以字節(jié)為單位。當用BI_RGB格式時,可設(shè)置為0
LONG biXPelsPerMeter ;//說明水平分辨率,用象素/米表示
LONG biYPelsPerMeter ;//說明垂直分辨率,用象素/米表示
DWORD biClrUsed ; //說明位圖實際使用的彩色表中的顏色索引數(shù)
DWORD biClrImportant ; //說明對圖象顯示有重要影響的顏色索引的數(shù)目,如果是0,表示都重要。
}BITMAPINFOHEADER ;
//BMP頭文件
typedef __packed struct
{
WORD bfType ; //文件標志.只對'BM',用來識別BMP位圖類型
DWORD bfSize ; //文件大小,占四個字節(jié)
WORD bfReserved1 ;//保留
WORD bfReserved2 ;//保留
DWORD bfOffBits ; //從文件開始到位圖數(shù)據(jù)(bitmap data)開始之間的的偏移量
}BITMAPFILEHEADER ;
//彩色表
typedef __packed struct
{
BYTE rgbBlue ; //指定藍色強度
BYTE rgbGreen ; //指定綠色強度
BYTE rgbRed ; //指定紅色強度
BYTE rgbReserved ;//保留,設(shè)置為0
}RGBQUAD ;
//位圖信息頭
typedef __packed struct
{
BITMAPFILEHEADER bmfHeader;
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
}BITMAPINFO;
typedef RGBQUAD * LPRGBQUAD;//彩色表
//圖象數(shù)據(jù)壓縮的類型
#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
//函數(shù)返回值定義
#define FUNC_OK 0
#define FUNC_MEMORY_ERROR 1
#define FUNC_FILE_ERROR 2
#define FUNC_FORMAT_ERROR 3
//用到的外部參數(shù)
//extern FileInfoStruct F_Info[8];//文件結(jié)構(gòu)體
//extern unsigned int POINT_COLOR;//畫筆顏色
//////////////////////////////////////////////////
//BMP解碼函數(shù)
BOOL BmpDecode(FileInfoStruct *BmpFileName);
//////////////////////////////////////////////////
//JPEG 解碼函數(shù)
int InitTag(void);
void InitTable(void); //初始化數(shù)據(jù)表
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); //色彩轉(zhuǎn)換的實現(xiàn),得到色彩空間數(shù)據(jù)
void StoreBuffer(void);
BYTE ReadByte(void); //從文件里面讀取一個字節(jié)出來
void Initialize_Fast_IDCT(void); //初始化反離散傅立葉變換
void Fast_IDCT(int * block); //快速反離散傅立葉變換
void idctrow(int * blk);
void idctcol(int * blk);
////對緩沖區(qū)數(shù)據(jù)進行移動處理,使操作SD卡就像操作sram一樣
unsigned int P_Cal(unsigned char*pc);
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -