📄 plxmms_combmp.h
字号:
#ifndef PLXMMS_COMBMP_H
#define PLXMMS_COMBMP_H
#ifdef MMS_DRAWCOMIMG
#ifndef GDI_ENGINE
#define GDI_ENGINE
#include "gdi_include.h"
#include "gdi_layer.h"
#include "gd_primitive.h"
#endif
#ifndef WIN32
#pragma Otime
#pragma no_check_stack
#endif
#ifndef GDI_ENTER_CRITICAL_SECTION
#include "gdi_internal.h"
#endif
/****************************************************************************
* Define
*****************************************************************************/
#define DEVICE_BMP_TRANSPARENT_COLOR (0x1234)
#define SUPPORT_BMP_COMPRESSION
/****************************************************************************
* Struct
*****************************************************************************/
typedef struct
{
U16 bfType;
U32 bfSize;
U16 bfReserved1;
U16 bfReserved2;
U32 bfOffBits;
} bitmap_file_header;
typedef struct
{
U32 biSize;
U32 biWidth;
U32 biHeight;
U16 biPlanes;
U16 biBitCount;
U32 biCompression;
U32 biSizeImage;
U32 biXPelsPerMeter;
U32 biYPelsPerMeter;
U32 biClrUsed;
U32 biClrImportant;
} bitmap_info_header;
typedef struct
{
U32 biSize;
U16 biWidth;
U16 biHeight;
U16 biPlanes;
U16 biBitCount;
} bitmap_core_header;
#define GDI_BI_RGB 0
#define GDI_BI_RLE8 1
#define GDI_BI_RLE4 2
#define GDI_BI_BITFIELDS 3
////////////////////////////////////////////////////////////////////////////////////////////
/// BMP file internal decoder
////////////////////////////////////////////////////////////////////////////////////////////
#undef INIT_SRC
#undef GET_U8
#undef GET_U16
#undef GET_U24
#undef GET_U32
#undef FLUSH
#undef SEEK
#undef IS_FROM_FILE
#undef GDI_IMAGE_BMP_DRAW_INTERNAL
#undef GDI_IMAGE_BMP_GET_DIMENSION_INTERNAL
#undef COMPRESSION_MODE
// 0: uncompressed
// 1: 256 color bitmap
// 2: 16 color bitmap
// 3: bitfields data
static BOOL gdi_image_bmp_compression;
static S32 gdi_image_bmp_width;
static S32 gdi_image_bmp_height;
static S32 gdi_image_bmp_src_x;
static S32 gdi_image_bmp_src_y;
static U8 gdi_image_bmp_run_length;
static U8 gdi_image_bmp_run_length_used;
static U8 gdi_image_bmp_code;
#define COMPRESSION_MODE(n,width,height) \
do\
{\
gdi_image_bmp_compression = n;\
gdi_image_bmp_src_x = 0;\
gdi_image_bmp_src_y = height-1;\
gdi_image_bmp_width = width;\
gdi_image_bmp_height = height;\
gdi_image_bmp_run_length = 0;\
}while(0)
#define FLUSH(SRC,X) \
{\
if(gdi_image_bmp_compression==GDI_BI_RGB\
||gdi_image_bmp_compression==GDI_BI_BITFIELDS)\
{\
GDI_BYTESTREAM_FLUSH_FILE(X);\
}\
}
#define GET_U16(SRC,X) GDI_BYTESTREAM_GET_WORD_FILE(X)
#define GET_U24(SRC,X) GDI_BYTESTREAM_GET_3BYTES_FILE(X)
#define GET_U32(SRC,X) GDI_BYTESTREAM_GET_DWORD_FILE(X)
#define IS_FROM_FILE 1
#define INIT_SRC(SRC,INPUT)
#define SEEK(SRC,BMP_SRC,OFFSET) gdi_bytestream_seek_file(OFFSET)
////////////////////////////////////////////////////////////////////////////////////////////
/// BMP mem internal decoder
////////////////////////////////////////////////////////////////////////////////////////////
#undef INIT_SRC
#undef GET_U8
#undef GET_U16
#undef GET_U24
#undef GET_U32
#undef FLUSH
#undef SEEK
#undef IS_FROM_FILE
#undef GDI_IMAGE_BMP_DRAW_INTERNAL
#undef GDI_IMAGE_BMP_GET_DIMENSION_INTERNAL
#undef COMPRESSION_MODE
// source from memory, will not support compression mode, because we need speed up decode time.
//#undef SUPPORT_BMP_COMPRESSION
#define SUPPORT_BMP_COMPRESSION
#define INIT_SRC(SRC,INPUT) U8 *SRC = INPUT;
#define GET_U8(SRC,X) \
{\
X = ((U8) *SRC++);\
}
#define GET_U16(SRC,X) \
{\
X = ((U16) (U8)*SRC++);\
X |=((U16) *SRC++)<<8;\
}
#define GET_U24(SRC,X) \
{\
X = ((U32) (U8)*SRC++);\
X |=((U32) (U8)*SRC++)<<8;\
X |=((U32) (U8)*SRC++)<<16;\
}
#define GET_U32(SRC,X) \
{\
X = ((U32) (U8)*SRC++);\
X |=((U32) (U8)*SRC++)<<8;\
X |=((U32) (U8)*SRC++)<<16;\
X |=((U32) (U8)*SRC++)<<24;\
}
extern lcd_layer_struct *gdi_act_layer_info;
//////////////////////////////////
//// GENERAL MEM RESIZER DECODER
/////////////////////////////////
#define COMPRESSION_MODE(n,width,height)
#define IS_FROM_FILE 0
#define FLUSH(SRC,X) SRC+=X
#define SEEK(SRC,BMP_SRC,OFFSET) SRC = BMP_SRC+OFFSET
#define GDI_IMAGE_BMP_DRAW_INTERNAL gdi_image_bmp_draw_internal_from_mem_c
//#define GDI_IMAGE_BMP_GET_DIMENSION_INTERNAL gdi_image_bmp_get_dimension
#define GDI_IMAGE_BMP_USING_RESIZER
#include "gdi_image_bmp_codec.h"
#undef GDI_IMAGE_BMP_USING_RESIZER
#undef GDI_IMAGE_BMP_DRAW_INTERNAL
#undef GDI_IMAGE_BMP_GET_DIMENSION_INTERNAL
#ifndef WIN32
#pragma arm section code = "INTERNCODE"
#endif
//////////////////////////////////
//// COLOR_FORMAT MEM NON_RESIZER DECODER
/////////////////////////////////
#if GDI_MAINLCD_BIT_PER_PIXEL == 1 || !defined(GDI_USING_LAYER)
#define GDI_IMAGE_BMP_CODEC_COLOR_FORMAT GDI_COLOR_FORMAT_MAINLCD
#define GDI_IMAGE_BMP_DRAW_INTERNAL gdi_image_bmp_draw_internal_from_mem_c_main
#include "gdi_image_bmp_codec.h"
#undef GDI_IMAGE_BMP_CODEC_COLOR_FORMAT
#undef GDI_IMAGE_BMP_DRAW_INTERNAL
#elif GDI_MAINLCD_BIT_PER_PIXEL == 16
#define gdi_image_bmp_draw_internal_from_mem_c_main gdi_image_bmp_draw_internal_from_mem_c_16
#elif GDI_MAINLCD_BIT_PER_PIXEL == 24
#define gdi_image_bmp_draw_internal_from_mem_c_main gdi_image_bmp_draw_internal_from_mem_c_24
#elif GDI_MAINLCD_BIT_PER_PIXEL == 32
#define gdi_image_bmp_draw_internal_from_mem_c_main gdi_image_bmp_draw_internal_from_mem_c_32
#endif
#ifdef __MMI_SUBLCD__
#if GDI_SUBLCD_BIT_PER_PIXEL == 1 || !defined(GDI_USING_LAYER)
#define GDI_IMAGE_BMP_CODEC_COLOR_FORMAT GDI_COLOR_FORMAT_SUBLCD
#define GDI_IMAGE_BMP_DRAW_INTERNAL gdi_image_bmp_draw_internal_from_mem_c_sub
#include "gdi_image_bmp_codec.h"
#undef GDI_IMAGE_BMP_CODEC_COLOR_FORMAT
#undef GDI_IMAGE_BMP_DRAW_INTERNAL
#elif GDI_SUBLCD_BIT_PER_PIXEL == 16
#define gdi_image_bmp_draw_internal_from_mem_c_sub gdi_image_bmp_draw_internal_from_mem_c_16
#elif GDI_SUBLCD_BIT_PER_PIXEL == 24
#define gdi_image_bmp_draw_internal_from_mem_c_sub gdi_image_bmp_draw_internal_from_mem_c_24
#elif GDI_SUBLCD_BIT_PER_PIXEL == 32
#define gdi_image_bmp_draw_internal_from_mem_c_sub gdi_image_bmp_draw_internal_from_mem_c_32
#endif
#endif
// we must provide each color format decoder
// color format 8 bit
#define GDI_IMAGE_BMP_CODEC_COLOR_FORMAT GDI_COLOR_FORMAT_8
#define GDI_IMAGE_BMP_DRAW_INTERNAL gdi_image_bmp_draw_internal_from_mem_c_8
#include "gdi_image_bmp_codec.h"
#undef GDI_IMAGE_BMP_CODEC_COLOR_FORMAT
#undef GDI_IMAGE_BMP_DRAW_INTERNAL
// color format 16 bit
#define GDI_IMAGE_BMP_CODEC_COLOR_FORMAT GDI_COLOR_FORMAT_16
#define GDI_IMAGE_BMP_DRAW_INTERNAL gdi_image_bmp_draw_internal_from_mem_c_16
#include "gdi_image_bmp_codec.h"
#undef GDI_IMAGE_BMP_CODEC_COLOR_FORMAT
#undef GDI_IMAGE_BMP_DRAW_INTERNAL
// color format 24 bit
#define GDI_IMAGE_BMP_CODEC_COLOR_FORMAT GDI_COLOR_FORMAT_24
#define GDI_IMAGE_BMP_DRAW_INTERNAL gdi_image_bmp_draw_internal_from_mem_c_24
#include "gdi_image_bmp_codec.h"
#undef GDI_IMAGE_BMP_CODEC_COLOR_FORMAT
#undef GDI_IMAGE_BMP_DRAW_INTERNAL
// color format 32 bit
#define GDI_IMAGE_BMP_CODEC_COLOR_FORMAT GDI_COLOR_FORMAT_32
#define GDI_IMAGE_BMP_DRAW_INTERNAL gdi_image_bmp_draw_internal_from_mem_c_32
#include "gdi_image_bmp_codec.h"
#undef GDI_IMAGE_BMP_CODEC_COLOR_FORMAT
#undef GDI_IMAGE_BMP_DRAW_INTERNAL
#ifndef WIN32
#pragma arm section code
#endif
typedef GDI_RESULT (*gdi_image_bmp_draw_func)(
S32 offset_x, S32 offset_y,
BOOL is_resized, S32 resized_width, S32 resized_height,
U8 *BMP_src, U32 size);
/// Reduce the code size
#if !defined(GDI_USING_LAYER_COLOR_FORMAT)
#if GDI_MAINLCD_BIT_PER_PIXEL!=8 &&GDI_SUBLCD_BIT_PER_PIXEL!=8
#define gdi_image_bmp_draw_internal_from_mem_c_8 (gdi_image_bmp_draw_func)gd_null_pointer_function
#define gdi_image_bmp_draw_internal_from_file_8 (gdi_image_bmp_draw_func)gd_null_pointer_function
#endif
#if GDI_MAINLCD_BIT_PER_PIXEL!=16&&GDI_SUBLCD_BIT_PER_PIXEL!=16
#define gdi_image_bmp_draw_internal_from_mem_c_16 (gdi_image_bmp_draw_func)gd_null_pointer_function
#define gdi_image_bmp_draw_internal_from_file_16 (gdi_image_bmp_draw_func)gd_null_pointer_function
#endif
#if GDI_MAINLCD_BIT_PER_PIXEL!=24 &&GDI_SUBLCD_BIT_PER_PIXEL!=24
#define gdi_image_bmp_draw_internal_from_mem_c_24 (gdi_image_bmp_draw_func)gd_null_pointer_function
#define gdi_image_bmp_draw_internal_from_file_24 (gdi_image_bmp_draw_func)gd_null_pointer_function
#endif
#if GDI_MAINLCD_BIT_PER_PIXEL!=32 &&GDI_SUBLCD_BIT_PER_PIXEL!=32
#define gdi_image_bmp_draw_internal_from_mem_c_32 (gdi_image_bmp_draw_func)gd_null_pointer_function
#define gdi_image_bmp_draw_internal_from_file_32 (gdi_image_bmp_draw_func)gd_null_pointer_function
#endif
#endif
// decoder table
const static gdi_image_bmp_draw_func gdi_image_bmp_draw_mem_decoders[]=
{
(gdi_image_bmp_draw_func)gd_null_pointer_function, // 1
gdi_image_bmp_draw_internal_from_mem_c_8,// 8
gdi_image_bmp_draw_internal_from_mem_c_16, // 16
gdi_image_bmp_draw_internal_from_mem_c_24,// 24
gdi_image_bmp_draw_internal_from_mem_c_32,// 32
gdi_image_bmp_draw_internal_from_mem_c_main, // main
#ifdef __MMI_SUBLCD__
gdi_image_bmp_draw_internal_from_mem_c_sub
#else
(gdi_image_bmp_draw_func)gd_null_pointer_function, // sub
#endif
};
#endif //#ifdef MMS_DRAWCOMIMG
#endif
/***********/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -