Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cImageJP2.h
Go to the documentation of this file.
1 //
6 //
7 
8 #ifndef _INC_cImageJP2_H
9 #define _INC_cImageJP2_H
10 #ifndef NO_PRAGMA_ONCE
11 #pragma once
12 #endif
13 
14 #include "GrayCodec.h"
15 
16 #ifdef USE_JP2
21 
22 struct opj_image;
23 
24 namespace GrayCodec
25 {
27 
29  : public cImageBase
30  , public cSurfaceFrames
31  {
36  typedef cImageBase SUPER_t;
37 
38  private:
39  static cThreadLockCount sm_LockJP2;
40  int m_nLockSurfaceCount;
41  opj_image* m_pImage;
42 
43  private:
44  static void _cdecl error_callback(const char* pszMsg, void *pContext);
45  static void _cdecl warning_callback(const char* pszMsg, void *pContext);
46 #ifdef _DEBUG
47  static void _cdecl info_callback(const char* pszMsg, void *pContext);
48 #endif
49 
50  public:
51  cImageJP2() noexcept;
52  virtual ~cImageJP2();
53 
54  HRESULT WriteJP2(cStreamOutput* pFile, int iLoss = 0) const;
55  HRESULT SetFrameCurrent(int iFrameNum) override;
56 
57  void SetEmpty() override;
58  HRESULT ReadStream(cStreamInput& stmIn) override;
59  HRESULT WriteStream(cStreamOutput* pFile) const override
60  {
61  return WriteJP2(pFile, 0);
62  }
63 
64  virtual HRESULT SetCopySurface(const cSurfaceBase& rSurfSrc) override;
65 
66  HRESULT CreateSurfaceJP2(PIXELS_t iSizeX, PIXELS_t iSizeY, WORD iBitsPerPixel, bool bColor, int iFrames = 1, const cRectI* pFrameRects = nullptr);
67  HRESULT LockSurface(bool bWrite = true);
68  void UnlockSurface();
69 
71  };
72 
74  : public IImageCreator
75  , public cSingleton<cImageJP2Type>
76  {
80  public:
82  : cSingleton<cImageJP2Type>(this, typeid(cImageJP2Type))
83  {
84  }
85  virtual bool IsFileExt(const FILECHAR_t* pszFileExt) const
86  {
87  return cFilePath::IsFileNameExt(pszFileExt, _FN(".jp2"));
88  }
89  virtual cImageBasePtr CreateObject() const override
90  {
91  return new cImageJP2;
92  }
93  };
94 };
95 
96 #endif // USE_JP2
97 #endif // _INC_cImageJP2_H
#define _FN(x)
like _T(x) macro for static text file names.
Definition: FileName.h:23
#define GRAYCODEC_LINK
Definition: GrayCodec.h:15
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cImageJP2.h:76
virtual bool IsFileExt(const FILECHAR_t *pszFileExt) const
Definition: cImageJP2.h:85
virtual cImageBasePtr CreateObject() const override
Definition: cImageJP2.h:89
cImageJP2Type()
Definition: cImageJP2.h:81
Definition: cImageJP2.h:31
virtual HRESULT SetCopySurface(const cSurfaceBase &rSurfSrc) override
HRESULT CreateSurfaceJP2(PIXELS_t iSizeX, PIXELS_t iSizeY, WORD iBitsPerPixel, bool bColor, int iFrames=1, const cRectI *pFrameRects=nullptr)
HRESULT LockSurface(bool bWrite=true)
UNITTEST_FRIEND(cImageJP2)
Definition: cImageBase.h:21
Definition: cRectI.h:22
Definition: cSurfaceBase.h:26
Definition: cSurfaceBase.h:366
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: cThreadLock.h:498
Definition: cImageBase.h:66
lib jp2 opaque internal structure.
Definition: GrayCodec.cpp:26
UNITTEST2_PREDEF(cAudioAAC)
int PIXELS_t
Count of pixels in a dimension of some image/surface.
Definition: cSurfaceInfo.h:20
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22