📄 skl_btm.h
字号:
/******************************************************** * Some code. Copyright (C) 2003 by Pascal Massimino. * * All Rights Reserved. (http://skal.planet-d.net) * * For Educational/Academic use ONLY. See 'LICENSE.TXT'.* ********************************************************//* * skl_btm.h * * basic bitmap class ********************************************************/#ifndef _SKL_BTM_H_#define _SKL_BTM_H_#include "skl_2d/skl_cmap.h"class SKL_FILE;class SKL_CONVERTER_MAP;#define SKL_CVRT_SIGNATURE(NAME) void NAME(SKL_BYTE *Dst, int Dst_BpS, \ const SKL_BYTE *Src, int Src_BpS, \ int W, int H, \ const SKL_UINT32 *Map)typedef SKL_CVRT_SIGNATURE( (*SKL_CVRT_FUNC) );//////////////////////////////////////////////////////////// Bitmaps//////////////////////////////////////////////////////////class SKL_BTM{ private: SKL_MEM_I *_Mem; int _W, _H, _BpS, _Quantum; SKL_BYTE *_Data; size_t _Data_Size; SKL_FORMAT _Format; SKL_CMAP_X *_CMap; int _Owns_CMap; void Apply_Func(SKL_BTM &Out, const SKL_CVRT_FUNC Func, const SKL_UINT32 *Map); void Set_Data_Size(size_t Size); public: SKL_BTM(SKL_MEM_I *Mem); virtual ~SKL_BTM(); virtual void Reset(); void Set(int W, int H, SKL_FORMAT Format, int BpS=0, SKL_CMAP_X *CMap=0); void Set_Virtual(int W, int H, SKL_FORMAT Format = 0, SKL_BYTE *Ptr = 0, int BpS=0, const SKL_CMAP_X *CMap=0); int Is_Virtual() const { return (_Data_Size==0); } void Make_Copy(const SKL_BTM *In); void Make_Virtual_Copy(const SKL_BTM *In); // color map const SKL_CMAP_X &Get_CMap() const { SKL_ASSERT(_CMap!=0); return *_CMap; } const SKL_CMAP_X *Get_CMap_Ptr() const { return _CMap; } SKL_CMAP_X *Get_CMap_Ptr() { return _CMap; } int Owns_CMap() const { return _Owns_CMap; } void Clear_CMap(); void New_CMap(int Nb=256); int Has_CMap() const { return (_CMap!=0); } int Get_Nb_Colors() const { return (Has_CMap() ? Get_CMap().Get_Nb_Colors() : 0); } // cmap : hard copy void Set_CMap(const SKL_CMAP_X &CMap); void Set_CMap(const SKL_CMAP &CMap) { Set_CMap(SKL_CMAP_X(CMap)); } // cmap : ref copy void Set_CMap(const SKL_CMAP_X *CMap); // Do what should with the colormap, once it has been set... virtual void Store_CMap() {} // accessors int Width() const { return _W; } int bWidth() const { return _W*_Quantum; } int Height() const { return _H; } int BpS() const { return _BpS; } // BYTE per scanline int PpS() const { return _BpS/_Quantum; } // PIXEL per scanline int Quantum() const { return _Quantum; } SKL_FORMAT Format() const { return _Format; } int Is_Colormapped() const { return (Format()==SKL_FORMAT::Colormapped()); } int Is_Alpha() const { return (Format()==SKL_FORMAT::Alpha()); } virtual SKL_BYTE *Lock() { return _Data; } virtual void Unlock() {} SKL_BYTE *Lock(const int x, const int y) { return Lock() + y*BpS() + x*Quantum(); } SKL_BYTE *Next_Scan(SKL_BYTE *Ptr) const { return Ptr + BpS(); } SKL_MEM_I *Get_Mem() const { return _Mem; } // misc ops void Remap(SKL_BTM &out, SKL_UINT32 Map[256]); void Copy_To(SKL_BTM &out); void Convert_To(SKL_BTM &Out, SKL_CONVERTER_MAP *Map=0); void Clear(); // debug virtual void Print_Infos() const;};//////////////////////////////////////////////////////////#endif /* _SKL_BTM_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -