Files
player/Project/Src/JPEG/bmp.h

113 lines
3.6 KiB
C
Raw Permalink Normal View History

2025-06-27 00:32:57 +08:00
#ifndef __BMP_H__
#define __BMP_H__
#include "base.h"
//////////////////////////////////////////////////////////////////////////////////
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
//ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-bmp<6D><70><EFBFBD>벿<EFBFBD><EBB2BF>
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/5/15
//<2F><EFBFBD><E6B1BE>V1.0
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾ 2014-2024
2025-06-27 00:32:57 +08:00
//All rights reserved
//********************************************************************************
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
2025-06-27 00:32:57 +08:00
//V1.1 20140722
2025-07-05 19:47:28 +08:00
//<2F>޸<EFBFBD>minibmp_decode<64><65><EFBFBD><EFBFBD>,ʹͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
2025-06-27 00:32:57 +08:00
//////////////////////////////////////////////////////////////////////////////////
2025-07-05 19:47:28 +08:00
//////////////////////////////////////////<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>///////////////////////////////
#define BMP_USE_MALLOC 1 //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>malloc,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>ʹ<EFBFBD><CAB9>malloc
#define BMP_DBUF_SIZE 2048 //<2F><><EFBFBD><EFBFBD>bmp<6D><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С(<28><><EFBFBD><EFBFBD>ӦΪLCD<43><44><EFBFBD><EFBFBD>*3)
2025-06-27 00:32:57 +08:00
//////////////////////////////////////////////END/////////////////////////////////
2025-07-05 19:47:28 +08:00
//BMP<4D><50>Ϣͷ
2025-06-28 18:16:25 +08:00
typedef struct __packed
2025-06-27 00:32:57 +08:00
{
2025-07-05 19:47:28 +08:00
u32 biSize ; //˵<><CBB5>BITMAPINFOHEADER<45><EFBFBD><E1B9B9><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long biWidth ; //˵<><CBB5>ͼ<EFBFBD><CDBC><EFBFBD>Ŀ<EFBFBD><C4BF>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ
long biHeight ; //˵<><CBB5>ͼ<EFBFBD><CDBC><EFBFBD>ĸ߶ȣ<DFB6><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ
u16 biPlanes ; //ΪĿ<CEAA><C4BF><EFBFBD>豸˵<E8B1B8><CBB5>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD>Ϊ1
u16 biBitCount ; //˵<><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>أ<EFBFBD><D8A3><EFBFBD>ֵΪ1<CEAA><31>4<EFBFBD><34>8<EFBFBD><38>16<31><36>24<32><34><EFBFBD><EFBFBD>32
u32 biCompression ; //˵<><CBB5>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD><CDA1><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ֮һ<D6AE><D2BB>
//BI_RGB<47><42>û<EFBFBD><C3BB>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
//BI_RLE8<45><38>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD>ص<EFBFBD>RLEѹ<45><D1B9><EFBFBD><EFBFBD><EFBFBD>룬ѹ<EBA3AC><D1B9><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>2<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>(<28>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>)<29><>
//BI_RLE4<45><34>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD>ص<EFBFBD>RLEѹ<45><D1B9><EFBFBD><EFBFBD><EFBFBD>룬ѹ<EBA3AC><D1B9><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>2<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
//BI_BITFIELDS<44><53>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>صı<D8B5><C4B1><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 biSizeImage ; //˵<><CBB5>ͼ<EFBFBD><CDBC><EFBFBD>Ĵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BI_RGB<47><42>ʽʱ<CABD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
long biXPelsPerMeter ; //˵<><CBB5>ˮƽ<CBAE>ֱ<EFBFBD><D6B1>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>ױ<EFBFBD>ʾ
long biYPelsPerMeter ; //˵<><CBB5><EFBFBD><EFBFBD>ֱ<EFBFBD>ֱ<EFBFBD><D6B1>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>ױ<EFBFBD>ʾ
u32 biClrUsed ; //˵<><CBB5>λͼʵ<CDBC><CAB5>ʹ<EFBFBD>õIJ<C3B5>ɫ<EFBFBD><C9AB><EFBFBD>е<EFBFBD><D0B5><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 biClrImportant ; //˵<><CBB5><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ҪӰ<D2AA><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>
2025-06-27 00:32:57 +08:00
}BITMAPINFOHEADER ;
2025-07-05 19:47:28 +08:00
//BMPͷ<50>ļ<EFBFBD>
2025-06-28 18:16:25 +08:00
typedef struct __packed
2025-06-27 00:32:57 +08:00
{
2025-07-05 19:47:28 +08:00
u16 bfType ; //<2F>ļ<EFBFBD><C4BC><EFBFBD>־.ֻ<><D6BB>'BM',<2C><><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>BMPλͼ<CEBB><CDBC><EFBFBD><EFBFBD>
u32 bfSize ; //<2F>ļ<EFBFBD><C4BC><EFBFBD>С,ռ<>ĸ<EFBFBD><C4B8>ֽ<EFBFBD>
u16 bfReserved1 ;//<2F><><EFBFBD><EFBFBD>
u16 bfReserved2 ;//<2F><><EFBFBD><EFBFBD>
u32 bfOffBits ; //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʼ<EFBFBD><CABC>λͼ<CEBB><CDBC><EFBFBD><EFBFBD>(bitmap data)<29><>ʼ֮<CABC><D6AE><EFBFBD>ĵ<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
}BITMAPFILEHEADER ;
2025-07-05 19:47:28 +08:00
//<2F><>ɫ<EFBFBD><C9AB>
2025-06-28 18:16:25 +08:00
typedef struct __packed
2025-06-27 00:32:57 +08:00
{
2025-07-05 19:47:28 +08:00
u8 rgbBlue ; //ָ<><D6B8><EFBFBD><EFBFBD>ɫǿ<C9AB><C7BF>
u8 rgbGreen ; //ָ<><D6B8><EFBFBD><EFBFBD>ɫǿ<C9AB><C7BF>
u8 rgbRed ; //ָ<><D6B8><EFBFBD><EFBFBD>ɫǿ<C9AB><C7BF>
u8 rgbReserved ;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
2025-06-27 00:32:57 +08:00
}RGBQUAD ;
2025-07-05 19:47:28 +08:00
//λͼ<CEBB><CDBC>Ϣͷ
2025-06-28 18:16:25 +08:00
typedef struct __packed
2025-06-27 00:32:57 +08:00
{
BITMAPFILEHEADER bmfHeader;
BITMAPINFOHEADER bmiHeader;
2025-07-05 19:47:28 +08:00
u32 RGB_MASK[3]; //<2F><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>RGB<47><42><EFBFBD><EFBFBD>.
2025-06-27 00:32:57 +08:00
//RGBQUAD bmiColors[256];
}BITMAPINFO;
2025-07-05 19:47:28 +08:00
typedef RGBQUAD * LPRGBQUAD;//<2F><>ɫ<EFBFBD><C9AB>
2025-06-27 00:32:57 +08:00
2025-07-05 19:47:28 +08:00
//ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BI_RGB 0 //û<><C3BB>ѹ<EFBFBD><D1B9>.RGB 5,5,5.
#define BI_RLE8 1 //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD>ص<EFBFBD>RLEѹ<45><D1B9><EFBFBD><EFBFBD><EFBFBD>룬ѹ<EBA3AC><D1B9><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>2<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>(<28>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>)<29><>
#define BI_RLE4 2 //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD>ص<EFBFBD>RLEѹ<45><D1B9><EFBFBD><EFBFBD><EFBFBD>룬ѹ<EBA3AC><D1B9><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>2<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
#define BI_BITFIELDS 3 //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD>صı<D8B5><C4B1><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
typedef struct
{
int x_size;
int y_size;
u16 *data;
}BMP_DecodeStruct;
int BMP_Decode(const u8 *filename,BMP_DecodeStruct *bmp) ;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2025-07-05 19:47:28 +08:00
//BMP<4D><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
2025-06-27 00:32:57 +08:00
u8 stdbmp_decode(const u8 *filename);
2025-07-05 19:47:28 +08:00
u8 minibmp_decode(u8 *filename,u16 x,u16 y,u16 width,u16 height,u16 acolor,u8 mode);//<2F>ߴ<EFBFBD>С<EFBFBD><D0A1>240*320<32><30>bmpͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>.
2025-06-27 00:32:57 +08:00
u8 bmp_encode(u8 *filename,u16 x,u16 y,u16 width,u16 height,u8 mode);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#endif