Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cImageBMP.h
Go to the documentation of this file.
1 //
5 //
6 
7 #ifndef _INC_cImageBMP_H
8 #define _INC_cImageBMP_H
9 #ifndef NO_PRAGMA_ONCE
10 #pragma once
11 #endif
12 
13 #include "cImageBase.h"
15 #include "GrayCore/include/cBits.h"
18 
19 namespace GrayLib
20 {
22 
24  : public cImageBase // The device independent bitmap.
25  {
32 
33  typedef cImageBase SUPER_t;
34 
35  public:
36  static const WORD k_DIB_HEADER_MARKER = ((WORD)('M' << 8) | 'B');
37  private:
38  cSurfaceBitmapInfo* m_pBMI;
39 
40  private:
41  void InitSurfaceBitmap(const cSurfaceBitmapInfo* pBMI);
42  public:
43  cImageBMP() noexcept;
44  cImageBMP(const cSurfaceBitmapInfo* pBMI);
45  cImageBMP(const FILECHAR_t* pszFileNameBMP);
46  virtual ~cImageBMP();
47 
48  virtual void SetEmpty() override;
49 
50  virtual bool isValidImage() const noexcept override
51  {
52  return cMem::IsValid(this) && m_pBMI != nullptr;
53  }
54 
55  WORD get_BitsPerPixel(void) const
56  {
58  return m_pBMI->get_BitsPerPixel() ;
59  }
60  size_t get_ImageSize(void) const
61  {
63  ASSERT(m_pBMI != nullptr);
64  return m_pBMI->get_ImageSize() ;
65  }
66 
68  {
69  return m_pBMI;
70  }
71  size_t get_HeaderSize(void) const
72  {
74  ASSERT(m_pBMI != nullptr);
75  return m_pBMI->bmiHeader.biSize ;
76  }
77  size_t get_TotalSize(void) const
78  {
80  return m_pBMI->get_TotalSize() ;
81  }
82 
83  WORD get_NumColors(void) const
84  {
85  return m_pBMI->get_NumColors() ;
86  }
87  size_t get_ColorSize(void) const // Size of the palette info.
88  {
89  // bmiHeader.biClrUsed
90  return m_pBMI->get_ColorSize() ;
91  }
92  tagRGBQUAD* get_PaletteColors() const // COLORREF
93  {
95  return m_pBMI->get_ColorTablePtr();
96  }
97 
98  HRESULT CreateSurface(const cSurfaceBitmapInfo* pBMI);
99  HRESULT CreateSurfaceBC(const cSurfaceInfo& rInfo);
100  HRESULT CreateSurfaceBC(PIXELS_t x, PIXELS_t y, BIT_ENUM_t iBitsPerPixel, int nColorQtyUsed = 0);
101 
102  HRESULT ReadBMP(cStreamInput& file, bool bHeader = true, bool bData = true);
103  HRESULT WriteBMP(cStreamOutput* pFile, bool bHeader = true) const;
104 
105  virtual HRESULT ReadStream(cStreamInput& strIn) override
106  {
107  return ReadBMP(strIn, true);
108  }
109  virtual HRESULT WriteStream(cStreamOutput* pFile) const override
110  {
111  return WriteBMP(pFile, true);
112  }
113 
114  virtual HRESULT SetCopySurface(const cSurfaceBase& Surf) override;
115 #ifdef _WIN32
116  HRESULT SetCopyBitmap(HBITMAP hBitmap, HPALETTE hPal = WINHANDLE_NULL);
117 #endif
118 
120  };
121 
123  : public IImageCreator
124  , public cSingleton<cImageBMPType>
125  {
129  public:
131  : cSingleton<cImageBMPType>(this, typeid(cImageBMPType))
132  {
133  }
134  virtual bool IsFileExt(const FILECHAR_t* pszFileExt) const
135  {
136  return cFilePath::IsFileNameExt(pszFileExt, _FN(".bmp"));
137  }
138  virtual cImageBasePtr CreateObject() const override
139  {
140  return new cImageBMP;
141  }
142  };
143 };
144 #endif // _INC_cImageBMP_H
#define _FN(x)
like _T(x) macro for static text file names.
Definition: FileName.h:23
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
#define WINHANDLE_NULL
HWND, HPEN, etc are NOT OS Handles. like HWND_DESKTOP. like HANDLEPTR_NULL. This is a WINAPI void* ha...
Definition: cOSHandle.h:23
Definition: cImageBMP.h:125
virtual bool IsFileExt(const FILECHAR_t *pszFileExt) const
Definition: cImageBMP.h:134
cImageBMPType()
Definition: cImageBMP.h:130
virtual cImageBasePtr CreateObject() const override
Definition: cImageBMP.h:138
Definition: cImageBMP.h:25
size_t get_ImageSize(void) const
Definition: cImageBMP.h:60
size_t get_TotalSize(void) const
Definition: cImageBMP.h:77
size_t get_ColorSize(void) const
Definition: cImageBMP.h:87
virtual HRESULT ReadStream(cStreamInput &strIn) override
Definition: cImageBMP.h:105
virtual HRESULT WriteStream(cStreamOutput *pFile) const override
Definition: cImageBMP.h:109
WORD get_BitsPerPixel(void) const
Definition: cImageBMP.h:55
UNITTEST2_PREDEF(cImageBMP)
cSurfaceBitmapInfo * get_BMI() const
Definition: cImageBMP.h:67
WORD get_NumColors(void) const
Definition: cImageBMP.h:83
size_t get_HeaderSize(void) const
Definition: cImageBMP.h:71
tagRGBQUAD * get_PaletteColors() const
Definition: cImageBMP.h:92
Definition: cImageBase.h:21
Definition: cSurfaceBase.h:26
Definition: cSurfaceInfo.h:308
WORD get_NumColors() const
Definition: cSurfaceInfo.cpp:158
tagRGBQUAD * get_ColorTablePtr() const noexcept
Definition: cSurfaceInfo.h:397
size_t get_ColorSize() const noexcept
Definition: cSurfaceInfo.h:391
size_t get_TotalSize() const noexcept
Definition: cSurfaceInfo.cpp:232
BIT_SIZE_t get_BitsPerPixel() const noexcept
Definition: cSurfaceInfo.h:378
size_t get_ImageSize() const noexcept
Definition: cSurfaceInfo.cpp:215
Definition: cSurfaceInfo.h:109
static bool __stdcall IsFileNameExt(const FILECHAR_t *pszFileName, const FILECHAR_t *pszExt) noexcept
Definition: cFilePath.cpp:1006
Definition: cRefPtr.h:225
Definition: cSingleton.h:127
Definition: cStream.h:306
Definition: cStream.h:126
Definition: cImageBase.h:66
Definition: cMesh.h:22
UNITTEST2_PREDEF(cQuadtree)
int PIXELS_t
Count of pixels in a dimension of some image/surface.
Definition: cSurfaceInfo.h:20
unsigned int BIT_ENUM_t
Enumerate number of bits or address a single bit in some array of bits.
Definition: cBits.h:20
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22
static bool __stdcall IsValid(const void *pData, size_t nSize=1, bool bWriteAccess=false) noexcept
Definition: cMem.cpp:33