md_surface.h

来自「MDEngine2plus游戏开发库! 用来开发游戏超级简单!」· C头文件 代码 · 共 116 行

H
116
字号
//********************************************************************
//						MD 引擎 图面 部件的定义
//		Powered by @J--S Studio			Johnhans		2002.9.8
//********************************************************************

#ifndef MD_SURFACE_H
#define MD_SURFACE_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifdef	MDENGINE2P_EXPORTS
#define MDENGINE_API __declspec(dllexport)
#else
#define MDENGINE_API __declspec(dllimport)
#endif

#include "common.h"
#include "MD_Engine.h"

class CImageBase;
class MDENGINE_API CMD_Surface  
{
public:
	CMD_Surface(void);
	CMD_Surface(char *ProviderName);
	virtual ~CMD_Surface(void);
	void Free();

public:
	bool ConnectProvider(char *ProviderName);	// 联接到外部ImageProvider
	void FreeProvider();						// 释放ImageProvider

	bool Create(int width, int height, DWORD dwtrans=COLORKEY_NO, DWORD dwCaps=DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY);
	bool Create(HBITMAP hBmp, DWORD dwtrans=COLORKEY_NO, DWORD dwCaps=DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY);
	bool Create(TCHAR *filename, DWORD dwtrans=COLORKEY_NO, DWORD dwCaps=DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY);
	bool Create(const BITMAPINFOHEADER &bmpinfohdr,RGBQUAD* BGRTable,const void *bitbuffer, DWORD dwtrans=COLORKEY_NO, DWORD dwCaps=DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY);
	bool Create(const LPBYTE buffer,DWORD size,DWORD dwtrans=COLORKEY_NO,DWORD dwCaps=DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY);

	LPDIRECTDRAWSURFACE7* GetDDSurface(void);
	bool ScanSurfaceInfo(void);
	SurfaceInfo* GetSurfaceInfo(void);
	LPRECT GetBltRect(void);
	DWORD  GetTransparentColor(void);
	DWORD  GetTransparentColorK(void);

	void SetTransparentColor(DWORD color);
	void SetBltRect(int left, int top, int right, int bottom);
	void SetBltRect(LPRECT rc);

	void FillColor(LPRECT rect, DWORD Color);
	void FillColor(LPRECT rect, WORD R=0, WORD G=0, WORD B=0);
	void DrawFast(CMD_Surface *pDest, BYTE dest, int x, int y, bool Trans=true);
	void DrawScaling(CMD_Surface *pDest, BYTE dest, RECT dRect, bool Trans=true);
	void DrawScaling(CMD_Surface *pDest, BYTE dest, int x, int y, int cx, int cy, bool Trans=true);
	void DrawGray(CMD_Surface *pDest, BYTE dest, int x, int y, bool Trans=true);
	void DrawAdditive(CMD_Surface *pDest, BYTE dest, int x, int y, bool Trans=true);
	void DrawAttenuation(CMD_Surface *pDest, BYTE dest, int x, int y, bool Trans=true);
	void DrawAlpha(CMD_Surface *pDest, BYTE dest, int iDestX, int iDestY, int iAlpha, bool trans=true);
	void DrawAlphaMMX(CMD_Surface *pDest, BYTE dest, int iDestX, int iDestY, int iAlpha, bool trans=true);
	void DrawAlphaFast(CMD_Surface *pDest, BYTE dest, int iDestX, int iDestY, bool trans=true);
	void DrawAlphaFastMMX(CMD_Surface *pDest, BYTE dest, int iDestX, int iDestY, bool trans=true);


private:
	LPDIRECTDRAWSURFACE7	m_lpDDS;				// DIRECTDRAWSURFACE7对象
	static CMD_Engine*		m_lpEngine;				// CMD_Engine实例指针
	DWORD					m_dwTransparentColor;	// 本图面透明色
	DWORD					m_dwTransparentColorK;	// 本图面透明色(内部像素格式)
	RECT					m_rcBlt;				// 位操作区域
	SurfaceInfo				m_SurfaceInfo;			// 图面信息


private:
	HINSTANCE				m_hInstProvider;		// Provider Instance
	CImageBase*				m_pLoader;				// ImageProvider Loader
	void*					releaseDLL;				// Provider Releaser

private:
	DWORD DDColorMatch(COLORREF rgb);	//颜色匹配
	bool ClipRect(int &x, int &y, RECT &rc);

	friend bool CMD_Engine::Create(HWND h_Wnd,DWORD dw_Width, DWORD dw_Height, int dw_Bpp,BOOL bFullScreen,BOOL force);
};


class CImageBase  
{
public:
	CImageBase():m_pPalette(NULL),m_pData(NULL),m_dwErrorCode(0),m_wBitCount(0),m_lHeight(0),m_lWidth(0){}
	virtual ~CImageBase(){destory();}

	virtual bool LoadImage(HWND hWnd, const LPVOID buffer,DWORD size,int bpp) = 0;
	virtual bool SaveImage(HWND hWnd, char *name,void *img){ return false; }

	long	GetWidth(void){ return m_lWidth; }
	long	GetHeight(void){ return m_lHeight; }
	WORD	GetBitCount(void){ return m_wBitCount; }
	RGBQUAD*	GetPalette(void){ return m_pPalette; }
	LPBYTE	GetData(void){ return m_pData; }

protected:
	void init(void){ m_dwErrorCode=0; m_lWidth=0; m_wBitCount=0; }
	void destory(void){SAFE_DELETE(m_pPalette);SAFE_DELETE(m_pData);}

protected:
	long	m_lWidth;
	long	m_lHeight;
	WORD	m_wBitCount;
	DWORD	m_dwErrorCode;
	RGBQUAD *m_pPalette;
	LPBYTE	m_pData;
};
#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?