📄 core_graphics.h
字号:
/**************************************************
图像处理和DirectDraw主干模块
Author: LittleFish QQ:93663886
E-Mail: kittyfish_1981@yahoo.com.cn
Blog: http://blog.csdn.net/kittyfish
真诚的期待你提出改良方法或程序BUG
**************************************************/
#ifndef _CORE_GRAPHICS_H_
#define _CORE_GRAPHICS_H_
#include "Core_Common.h"
//
#include "Core_Input.h"
#include "Core_Sound.h"
class cGraphics;
class cDirectDraw;
/*全局变量*/
extern cDirectDraw* g_pDirectDraw;
class cGraphics
{
public:
cGraphics();
cGraphics( int width, int height );
~cGraphics();
public:
BOOL Create( int width, int height );
BOOL CreateFromBitmap( TCHAR* bmpFileName );
BOOL Load( TCHAR* bmpFileName );
BOOL SetClipper( LPDIRECTDRAWCLIPPER lpDDC, HWND hWnd );
BOOL SetColorKey( COLORREF rgb );
BOOL ColorFill( COLORREF rgb );
BOOL LoadBitmap( TCHAR* bmpFileName, int width=0, int height=0 );
BOOL LoadBitmap( HBITMAP hBmp, int xSrc, int ySrc, int srcWidth, int srcHeight );
BOOL LoadBitmap( HBITMAP hBmp, int left, int top, int xSrc, int ySrc, int srcWidth, int srcHeight );
BOOL LoadBitmap( TCHAR* bmpFileName, int xSrc, int ySrc, int srcWidth, int srcHeight );
BOOL LoadBitmap( TCHAR* bmpFileName, int left, int top, int xSrc, int ySrc, int srcWidth, int srcHeight );
BOOL LoadGraphics( cGraphics* srcGraphics, LPRECT srcRect=NULL );
BOOL LoadGraphics( cGraphics* srcGraphics, int left, int top, LPRECT srcRect=NULL );
BOOL LoadGraphics( cGraphics* srcGraphics, int xSrc, int ySrc, int xWidth, int yHeight );
BOOL LoadGraphics( cGraphics* srcGraphics, int left, int top, int xSrc, int ySrc, int xWidth, int yHeight );
BOOL DisplayText( TCHAR* text,int left,int top,COLORREF rgb=RGB(255,255,255) );
BOOL DisplayText( int left, int top, COLORREF rgb, TCHAR* chFormat, ... );
BOOL DisplayText( RECT* pRectText, COLORREF rgb, TCHAR* chFormat, ... );
BOOL SaveToBMP( char* fileName );
void Release();
LPDIRECTDRAWSURFACE7 GetSurface() { return m_lpDDS; };
int GetHeight() { return m_iHeight; };
int GetWidth() { return m_iWidth; };
void Lock( void** pSurface, int* lPitch );
void Unlock();
DWORD RGB2GDIColor( COLORREF clrGDIColor );
private:
LPDIRECTDRAWSURFACE7 m_lpDDS;
public:
int m_iHeight;
int m_iWidth;
COLORREF m_clrKey;//colorkey
BOOL m_bColorKey;
};
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
class cDirectDraw
{
public:
cDirectDraw();
~cDirectDraw();
public:
LPDIRECTDRAW7 GetDirectDraw() { return m_lpDD; };
LPDIRECTDRAWSURFACE7 GetPrimSurface() { return m_lpDDS_Prim; };
LPDIRECTDRAWSURFACE7 GetBackSurface() { return m_lpDDS_Back; };
/* 创建DirectDraw,同时创建InputDevice和AudioDevice */
BOOL Create( HWND hWnd, HINSTANCE hInst, BOOL bFullScreen=FALSE, int iWidth=800, int iHeight=600 );
void SetHwnd( HWND hWnd ) { m_hWnd = hWnd; };
BOOL SetDisplayMode( int width, int height);
void SetSize( int iHeight, int iWidth ) { m_iHeight=iHeight; m_iWidth=iWidth; };
/* 贴图 */
BOOL LoadToBackSurface( cGraphics* offScreenGraphics, int left, int top, LPRECT srcRect=NULL );
BOOL LoadToBackSurface( cGraphics* offScreenGraphics, int left, int top, int height, int width );
/* 半透明贴图 */
BOOL DrawAlpha( cGraphics* offScreenGraphics, int left, int top, LPRECT srcRect );
BOOL DrawAlpha( cGraphics* offScreenGraphics, int left, int top );
/* 逆时针旋转任意角度 */
/* mode = 1: 有锯齿 */
/* mode = 2: 消锯齿处理,速度慢,不合适即时渲染,多用于Loading时加载 */
cGraphics* RotateImage ( cGraphics** ppGrDest, cGraphics* pGrSrc, float arcAngle, COLORREF clrKey, BOOL bIsColorKey, int mode = 2 );
/* 特殊角度的旋转 */
cGraphics* RotateImage90 ( cGraphics* pGrDest, cGraphics* pGrSrc, COLORREF clrBack = 0 );
cGraphics* RotateImage180( cGraphics* pGrDest, cGraphics* pGrSrc, COLORREF clrBack = 0 );
cGraphics* RotateImage270( cGraphics* pGrDest, cGraphics* pGrSrc, COLORREF clrBack = 0 );
/* 针对对称的图像,方法:顺时针旋转90度,再水平翻转 */
cGraphics* RotateImageComplement( cGraphics* pGrDest, cGraphics* pGrSrc, COLORREF clrBack = 0 );
/* 遮罩 */
void DrawImageMask( cGraphics* pGrSrc, cGraphics* pGrMask, COLORREF clrMask, int left, int top, int mode=0 );
/* 垂直翻转 */
cGraphics* ReverseImageV( cGraphics* pGrDest, cGraphics* pGrSrc );
/* 水平翻转 */
cGraphics* ReverseImageH( cGraphics* pGrDest, cGraphics* pGrSrc );
/* 混合 */
/* 输出文本 */
HDC BeginText( COLORREF rgb=RGB(255,255,255) );
void TextOut( HDC hDC, int left, int top, COLORREF rgb, TCHAR* chFormat, ... );
void TextOut( HDC hDC, int left, int top, TCHAR* chFormat, ... );
void EndText( HDC hDC );
BOOL DisplayText( int left, int top, COLORREF rgb, TCHAR* chFormat, ... );
/* 清屏 */
void ClearScreen( COLORREF clrBack=0 );
/* 颜色转换 */
BYTE GetR( BYTE bt1 );
BYTE GetG( BYTE bt0, BYTE bt1 );
BYTE GetB( BYTE bt0 );
BYTE SetByte1( BYTE b, BYTE g );
BYTE SetByte2( BYTE g, BYTE r );
BYTE GetR( PIXEL16 pixel );
BYTE GetG( PIXEL16 pixel );
BYTE GetB( PIXEL16 pixel );
COLORREF HI2RGB( PIXEL16 pixel );
PIXEL16 RGB2HI( COLORREF rgb );
PIXEL16 RGB2HI( BYTE r, BYTE g, BYTE b );
/* RGB2GDIColor 不能在页面被锁定的情况下使用,否则返回0xffffffff */
DWORD RGB2GDIColor( COLORREF clrGDIColor );
cInputDevice* GetKeyboard() { return &m_keyboardDev; };
cInputDevice* GetMouse() { return &m_mouseDev; };
cInput* GetInput() { return &m_input; };
public:
virtual BOOL PreFrame();//
virtual BOOL Frame();
virtual BOOL Release();
private:
LPDIRECTDRAW7 m_lpDD;
LPDIRECTDRAWSURFACE7 m_lpDDS_Prim; //主页面
LPDIRECTDRAWSURFACE7 m_lpDDS_Back; //背页面
HWND m_hWnd;
BOOL m_bExclusive; //是否全屏模式
int m_iHeight;
int m_iWidth;
BOOL m_bIsDrawing; //unuse
cInput m_input;
cInputDevice m_keyboardDev;
cInputDevice m_mouseDev;
BOOL m_bInputSucc;
//cSound m_sound;
//cMusicChannel m_musicChannel;
public:
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -