📄 mimage.h
字号:
#ifndef _MIMAGE_HEADER
#define _MIMAGE_HEADER
#include "MGlobalConstant.h"
#include "MGlobalMacro.h"
#include "MBinary.h"
#include "MTool.h"
#include "AEE.h"
#include "AEEModGen.h"
#include "AEEAppGen.h"
#include "AEEShell.h"
#include "AEEStdLib.h"
#include "AEEHeap.h"
#define BMP_HEADER_SIZE 54
#define PALLETTE_START_OFFSET 54
typedef AEERect TRANSFORM_AREA;
typedef enum eANGLE_TYPE {
ANGLE_90_DEGREE_CW = 0,
ANGLE_270_DEGREE_CCW = 0,
ANGLE_180_DEGREE_CW = 1,
ANGLE_180_DEGREE_CCW = 1,
ANGLE_270_DEGREE_CW = 2,
ANGLE_90_DEGREE_CCW = 3
} ANGLE_TYPE;
typedef struct stRGB_QUAD {
uint8 blue;
uint8 green;
uint8 red;
uint8 reserved;
uint32 getIntValue() {
return (reserved&0xff) + ( (red&0xff)<<8 )+ ( (green&0xff)<<16 ) + ( (blue&0xff)<<24);
}
} RGB_QUAD;
class CMImage {
public:
__MACRO_NEW_DELETE_SOURCE
CMImage(CMBinary *pBinary, boolean isFullBmp) {
/*
// pBinary : 捞固瘤 单捞磐啊 甸绢 乐绰 官捞呈府 按眉
// isFullBmp : 单捞磐 救俊 Bmp Header啊 器窃登绢 乐绰瘤狼 咯何 ( 器窃登绢 乐栏搁 true )
//
// 林狼 : 官捞呈府 按眉绰 捞固瘤肺 函券等 捞饶(convert 沏记捞 沥惑 荐青茄 捞饶)俊 磊悼 秦力等促.
*/
cache_ = NULL;
pBinary_ = pBinary;
if ( isBmpPalletteIn_ = isFullBmp) {
// 单捞磐 救俊 bmp Pallette档 器窃登绢 乐绰 肯傈茄 bmp 老 版快绰, binary 按眉 单捞磐 加俊 庆歹客 官叼啊 窃膊 粮犁茄促.
processHeader();
} else {
body_ = pBinary->getData();
}
isConverted_ = false;
isReallocated_ = false;
}
~CMImage() {
freeData();
}
void freeData();
CMImage *createFrom(); // this甫 汗荤茄 货肺款 按眉甫 积己
static CMImage *createFrom(CMImage *pImage); // pImage甫 汗荤茄 货肺款 按眉甫 积己
boolean setBmpPallette(CMBinary *pPallette, boolean palFree = false);
void setPalletteColor(int index, RGBVAL color);
void setPalletteColor(int index, uint8 r, uint8 g, uint8 b);
RGBVAL getPalletteColor(int index);
RGB_QUAD *getPalletteRef(int index);
void setPixel(int x, int y, int data);
int getPixel(int x, int y);
void swapPixel(int x1, int y1, int x2, int y2);
void toGray();
void toTransparent(int rate, RGBVAL color);
void toTransparent(int rate, int r, int g, int b);
void zoomIn(int level); // ta_.x 客 ta_.y 困摹啊 淋窍妨绰 盔夯狼 哭率 困 谅钎啊 登绊 傈眉 农扁客 涝仿等 硅啦俊 蝶扼 盔夯狼 承捞啊 搬沥等促.
void zoomOut(int level);
void toMosaic(int level);
void toMask();
void flip(boolean bVertical = false);
#ifdef FREE_ROTATE
void rotate(int angle);
#else
void rotate(ANGLE_TYPE at);
#endif
void setTranformArea(int x,int y, int w, int h);
void convert();
void *getBmp();
uint16 getWidth();
uint16 getHeight();
boolean isConverted();
private:
void freeCache();
byte *createBmpHeader(CMBinary *body, CMBinary *header); // bmp header甫 父电促.
void processHeader(); // 庆歹甫 颇教茄促.
int getPixelIndex(int x, int y); //x,y 谅钎狼 侨伎捞 linear memory俊 困摹秦 乐绰 offset捞 倔付牢瘤 备茄促.
uint8 getPixelPerByte(uint8 nBit); // bmp pixel access甫 困茄 惑荐 沥狼
uint8 getShiftNo(uint8 nBit ); // bmp pixel access甫 困茄 惑荐 沥狼
uint8 getMask(uint8 nBit); // bmp pixel access甫 困茄 惑荐 沥狼
CMBinary *pBinary_;
void *bmp_;
byte *body_;
boolean isBmpPalletteIn_;
boolean isConverted_;
boolean isReallocated_;
uint8 colorDepth_; // bit
uint16 colorCount_;
uint16 width_;
uint16 height_;
int8 pixelPerByte_;
uint8 shiftNo_;
byte mask_;
TRANSFORM_AREA ta_;
#ifdef USE_MODULE_DYNAMIC_CACHE
uint8 *cache_;
#define CACHE_pixelPerByte_ cache_[0]
#define CACHE_shiftNo_ cache_[1]
#define CACHE_mask_ cache_[2]
#define CACHE_pixelALine_ cache_[3]
#define CACHE_pixelALineLeft_ cache_[4]
#define CACHE_maskStatic_ cache_[5]
#else
uint8 CACHE_pixelPerByte_;
uint8 CACHE_shiftNo_;
uint8 CACHE_mask_;
uint8 CACHE_pixelALine_;
uint8 CACHE_pixelALineLeft_;
uint8 CACHE_maskStatic_; // used as static variables.
#endif // USE_MODULE_DYNAMIC_CACHE
};
#endif // _MIMAGE_HEADER
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -