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

📄 plxmms_combmp.h

📁 mtk wap和mms代码。。适应mtk 25。26平台
💻 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 + -