📄 pgesurface.h
字号:
// PGESurface.h: interface for the CPGESurface class.
//
//////////////////////////////////////////////////////////////////////
#pragma once
#include "pgestd.h"
#include "pgedevice.h"
#include "PGEFont.h"
#define PGE_MAX_SURFACE 255
#define PGE_RESNAME_MAX 30
#define RGBto16bit565(r, g, b) \
(((WORD)r<<8)&0xf800)|(((WORD)g<<3)&0x07e0)|((WORD)b>>3) \
// PGE标准颜色
enum PGE_DEFCOLOR
{
PGE_NONECOLOR = 0xfffff,
PGE_BLACK = 0,
PGE_WHITE = 0xffff,
PGE_RED = 0xf800,
PGE_GREEN = 0x7e0,
PGE_BLUE = 0x1f,
PGE_PURPLE = 0xf81f,
PGE_YELLOW = 0xffe0,
PGE_LIGHTBLUE = 0x7ff,
};
// PGE表面类型
enum PGE_SURFACE_TYPE
{
PGE_NOMARL_SURFACE = 0,
PGE_MAIN_SURFACE,
PGE_BACK_SURFACE,
PGE_PGP_SURFACE
};
// PGE绘图参数
enum PGE_BLT_TYPE
{
PGE_BLT_NORMAL = 0x1,
PGE_BLT_ADD = 0x2,
PGE_BLT_OR = 0x3,
PGE_BLT_AND = 0x4,
PGE_BLT_ALPHA = 0x5,
PGE_BLT_MASK = 0x10,
PGE_BLT_COLOR = 0x20,
PGE_BLT_ROTSCL = 0x100,
PGE_BLT_ANDALPHA = 0x1000, // 使用目的面的Alpha
PGE_CLT_COPYALPHA = 0x2000, // 复制alpha通道到目的面,只适用于PGE_BLT_NORMAL
};
// 字体使用参数
enum PGE_FONT_DRAWTYPE
{
PGE_FONT_USEMAIN = 0xff,
PGE_FONT_USEFILE,
PGE_FONT_USESURFACE,
PGE_FONT_MUTIL = 0,
PGE_FONT_SINGLELINE
};
typedef struct tgaSurfaceInfo
{
WORD wWiedth, wHeigh;
BYTE wSurfaceTp;
} PGESurfaceInfo;
class CPGESurface : public CPGEBase
{
public:
CPGESurface(CPGEDevice* pDevice);
virtual ~CPGESurface();
// 创建一个表面
PGE_RESULT CreateSurface(WORD wGrHeight, WORD wGrWide,
BYTE btSurfaceTp = PGE_NOMARL_SURFACE,
DWORD dwMaskColor = PGE_NONECOLOR);
// 锁定表面
void Lock(void** pBuff);
// 表面解锁
void unLock();
// 在表面上贴图
void Blt(CPGESurface* pSrcSurface,
RECT* prSrc, RECT* prDis, WORD wFlag = PGE_BLT_NORMAL);
// 把表面的内容翻转到屏幕或者主表面
void Flip(); // 竖向
void FlipH(); // 横向
void Clean(int bWhite=0);
PGE_RESULT SetSurfaceInfo(PGESurfaceInfo SurfaceInfo, CPGEBase* pPGEBase = NULL); // 设置表面信息
PGESurfaceInfo* GetSurfaceInfo(); // 区的表面信息
DWORD GetMaskColor(); // 取得遮挡色
void SetMaskColor(WORD wColor);
void DrawText(char* pText, int x, int y, WORD wColor); // 绘制文字
PGE_RESULT CreateFont(void* pData = NULL, WORD iUseType = PGE_FONT_USEMAIN); // 为表面创建字体
CPGEFont* GetFont(CPGEBase* pPGEBase = NULL); // 取得表面字体
BYTE* GetAlphaChanle(); // 取得alpha通道
BYTE* GetStaticAlphaChanle(); // 取得静态alpha通道
void SetAlphaChanle(RECT* pRect, BYTE* pbtAlphaData); // 设定某区域内Alpha
void RestoreAlphaChanle(RECT* pRect); // 恢复Alpha,前提拥有staticAlpha
PGE_RESULT EnableAlphaChanle(); // 开启alpha通道,调用此函数将同时开启alpha和staticAlpha,并拷贝aplha到staticalpha
PGE_RESULT CreateAlphaWithMaskColor(); // 使用遮挡色创建alpha
void SetScale(float fScale); // 放缩
float GetScale(); // 取得放缩值
DWORD GetScaleOffset(); // 取得取整后的放缩值
void SetRot(short iRot); // 旋转,单位: 角度
int GetRot();
void SetAlphaVal(BYTE btAlpha);
BYTE GetAlphaVal();
DWORD GetDataSize();
void SetReplaceColor(WORD wColor);
WORD GetReplaceColor();
void SetPal(WORD* pwPal, int iPalPiexlCount);
WORD* GetPal();
// pgp面,使用staticAlpha,setPgpSurface时,必须设置pbtAlpha并且不设置pbtStaticAlpha,然后调用enableAlpha
// 否则,需要自己处理staticAlpha并且设置pbtStaticAlpha
void SetPgpSurface(WORD* pwPicData, BYTE* pbtAlpha = NULL, BYTE* pbtStaticAlpha = NULL);
void SetPiexl(int x, int y, WORD wColor); // 设置某个点的颜色
void DrawLine(int x1, int y1, int x2, int y2, WORD wColor); // 画线
void DrawRect(int x1, int y1, int x2, int y2, WORD wColor, int bk = 0); // 画矩形
void DrawCircle(int x0, int y0, int r, WORD wColor); // 画圆
BYTE m_btSurfaceBit; // 表面位数
BYTE m_btUserData; // 可以保存一字节用户数据
WPOINT m_CentPoint; // 面的中心点,默认为%50的x,y
BYTE m_btActive;
private:
void Blt8(CPGESurface* pSrcSurface, RECT* prSrc, RECT* prDis, WORD wFlag);
CPGEDevice* m_pDevice; // PGE主设备
PGESurfaceInfo m_SurfaceInfo; // 表面类型
BYTE* m_pbtAlphaChanle; // Alpha通道
BYTE* m_pbtAlphaChanleStatic; // 静态Alpha通道
WORD* m_pwMainData; // 表面主缓冲
DWORD m_dwDataSize; // 表面大小
CPGEFont* m_pFont; // 字体
BYTE m_btFontH; // 字体高
BYTE m_btFontW; // 字体宽
BOOL m_bAlphaChanle; // 是否具有Alpha通道
BOOL m_bLocked; // 锁定标志
DWORD m_dwScale; // 缩放倍数
short m_iRot; // 旋转角度
DWORD m_dwMaskColor; // 遮罩颜色
BYTE m_btAlpha; // alpha值,作用于整个表面,当使用时alpha通道不起作用
WORD m_wRplaceColor; // 用来叠加在表面上的颜色
WORD* m_pwPal; // 调色板
};
// 从文件创建一个面,支持pgp和bmp,推荐pgp,因为经过优化
void CreateSurfaceFromFile(CPGESurface** pSurface,
char* caFileName, CPGEDevice*
pDevice, DWORD wMaskColor = PGE_NONECOLOR);
// 从文件创建Alpha通道,只支持8位bmp
PGE_RESULT CreateAlphaFromFile(CPGESurface* pSurface,
char* caFileName);
// 将一个面保存到24位位图
bool SaveToBitmapFile(CPGESurface* lpSurface, char* filename);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -