Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cSurfaceConv.h
Go to the documentation of this file.
1 //
4 //
5 
6 #ifndef _INC_cSurfaceConv_H
7 #define _INC_cSurfaceConv_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "cSurfaceInfo.h"
13 #include "cColorRef.h"
16 
17 namespace GrayLib
18 {
20 
22  {
27 
28  public:
29  static const int k_MaxLineWidth = 4096;
30 
31  private:
32  typedef void (_LOCCALL CONVF_t)(const void* pvSrc, void* pvDst, int nDstWidth);
33  typedef CONVF_t cSurfaceConv:: * CONVFP_t;
34 
35  CONVF_t Conv_BGR888_RGB888;
36  CONVF_t Conv_BGR888_XBGR8888;
37  CONVF_t Conv_BGR888_ABGR8888;
38  CONVF_t Conv_BGR888_XRGB8888;
39  CONVF_t Conv_BGR888_ARGB8888;
40  CONVF_t Conv_BGR888_RGB565;
41  CONVF_t Conv_BGR888_XRGB1555;
42  CONVF_t Conv_BGR888_ARGB1555;
43  CONVF_t Conv_BGR888_A8;
44  CONVF_t Conv_ABGR8888_ARGB8888;
45  CONVF_t Conv_XBGR8888_ARGB8888;
46  CONVF_t Conv_XBGR8888_RGB565;
47  CONVF_t Conv_RGB888_BGR888;
48  CONVF_t Conv_RGB888_XBGR8888;
49  CONVF_t Conv_RGB888_ABGR8888;
50  CONVF_t Conv_RGB888_XRGB8888;
51  CONVF_t Conv_RGB888_ARGB8888;
52  CONVF_t Conv_RGB888_RGB565;
53  CONVF_t Conv_RGB888_XRGB1555;
54  CONVF_t Conv_RGB888_ARGB1555;
55  CONVF_t Conv_RGB888_A8;
56  CONVF_t Conv_XRGB8888_BGR888;
57  CONVF_t Conv_XRGB8888_XBGR8888;
58  CONVF_t Conv_XRGB8888_ABGR8888;
59  CONVF_t Conv_XRGB8888_RGB888;
60  CONVF_t Conv_XRGB8888_ARGB8888;
61  CONVF_t Conv_XRGB8888_RGB565;
62  CONVF_t Conv_XRGB8888_XRGB1555;
63  CONVF_t Conv_XRGB8888_ARGB1555;
64  CONVF_t Conv_XRGB8888_A8;
65  CONVF_t Conv_ARGB8888_BGR888;
66  CONVF_t Conv_ARGB8888_XBGR8888;
67  CONVF_t Conv_ARGB8888_ABGR8888;
68  CONVF_t Conv_ARGB8888_RGB888;
69  CONVF_t Conv_ARGB8888_XRGB8888;
70  CONVF_t Conv_ARGB8888_RGB565;
71  CONVF_t Conv_ARGB8888_XRGB1555;
72  CONVF_t Conv_ARGB8888_ARGB1555;
73  CONVF_t Conv_ARGB8888_A8;
74  CONVF_t Conv_RGB565_BGR888;
75  CONVF_t Conv_RGB565_XBGR8888;
76  CONVF_t Conv_RGB565_ABGR8888;
77  CONVF_t Conv_RGB565_RGB888;
78  CONVF_t Conv_RGB565_XRGB8888;
79  CONVF_t Conv_RGB565_ARGB8888;
80  CONVF_t Conv_RGB565_XRGB1555;
81  CONVF_t Conv_RGB565_ARGB1555;
82  CONVF_t Conv_XRGB1555_BGR888;
83  CONVF_t Conv_XRGB1555_XBGR8888;
84  CONVF_t Conv_XRGB1555_ABGR8888;
85  CONVF_t Conv_XRGB1555_RGB888;
86  CONVF_t Conv_XRGB1555_XRGB8888;
87  CONVF_t Conv_XRGB1555_ARGB8888;
88  CONVF_t Conv_A8_RGB888;
89  CONVF_t Conv_A8_XRGB8888;
90  CONVF_t Conv_A8_ARGB8888;
91  CONVF_t Conv_A8_RGB565;
92  CONVF_t Conv_A8_XRGB1555;
93  CONVF_t Conv_A8_ARGB1555;
94  CONVF_t Conv_ARGB1555_RGB888;
95  CONVF_t Conv_ARGB1555_XRGB8888;
96  CONVF_t Conv_ARGB1555_ARGB8888;
97 
98  CONVF_t Conv_Copy;
99  CONVF_t Conv_2Stage;
100 
101  struct CConvDef
102  {
104  SURF_FORM_TYPE m_eFormatSrc;
105  SURF_FORM_TYPE m_eFormatDst;
106  CONVFP_t m_pConv;
107  };
108 
109  static const CConvDef k_aConvDef[];
110 
111  CONVFP_t m_ConvertLine;
112  CONVFP_t m_ConvertLine1;
113  CONVFP_t m_ConvertLine2;
114 
115  BIT_SIZE_t m_nSrcBitsPerPixel;
116 
117  static const DWORD k_nScaleMult = 0x10000;
118  int m_nScaleWidth;
119  DWORD m_nScaleHM;
120  DWORD m_nScaleWStep;
121  DWORD m_nScaleHStep;
122 
123  private:
124  int Conv_Scale(const void* pvSrc, void* pvDst, int nDstWidth);
125 
126  public:
128  ~cSurfaceConv();
129 
130  bool isInitForm() const noexcept
131  {
133  return m_ConvertLine != nullptr;
134  }
135  bool isScaling() const noexcept
136  {
138  return m_nScaleWStep != k_nScaleMult || m_nScaleHStep != k_nScaleMult;
139  }
140 
141  HRESULT InitForm(SURF_FORM_TYPE eFormatSrc, SURF_FORM_TYPE eFormatDst = SURF_FORM_UNKNOWN);
142  bool SetScale(PIXELS_t nSrcWidth, PIXELS_t nSrcHeight, PIXELS_t nDstWidth, PIXELS_t nDstHeight);
143  void SetAlphaKey(COLOR_ELEM_t r, COLOR_ELEM_t g, COLOR_ELEM_t b);
144 
145  void ConvertLines(const void* pvSrc, size_t nSrcPitchBytes, void* pvDst, size_t nDstPitchBytes, int nDstWidth, int iDstHeight, bool bTopDownFlip);
146 
148  };
149 };
150 #endif
#define _LOCCALL
Definition: GrayCore.h:52
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
Using X files without the sources and the makefile How to use you just create a debug directory e g
Definition: Readme.txt:21
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cColorRef.h:483
Definition: cSurfaceConv.h:22
bool isScaling() const noexcept
Definition: cSurfaceConv.h:135
bool isInitForm() const noexcept
Definition: cSurfaceConv.h:130
UNITTEST_FRIEND(cSurfaceConv)
Definition: cMesh.h:22
UNITTEST2_PREDEF(cQuadtree)
SURF_FORM_TYPE
Definition: cSurfaceInfo.h:24
@ SURF_FORM_UNKNOWN
AKA D3DFMT_UNKNOWN.
Definition: cSurfaceInfo.h:32
BYTE COLOR_ELEM_t
A single 8 bit color element. alpha, red, green, or blue intensity as 0-255.
Definition: cColorRef.h:34
int PIXELS_t
Count of pixels in a dimension of some image/surface.
Definition: cSurfaceInfo.h:20
unsigned short BIT_SIZE_t
number of bits in some intrinsic type. <= 256 ?
Definition: cBits.h:17