6 #ifndef _INC_cSurfaceInfo_H
7 #define _INC_cSurfaceInfo_H
12 #include "../GrayLibBase.h"
13 #include "../WinAPI/WinTypes.h"
77 INT32 biXPelsPerMeter;
78 INT32 biYPelsPerMeter;
80 UINT32 biClrImportant;
91 tagBITMAPINFOHEADER bmiHeader;
92 tagRGBQUAD bmiColors[1];
106 class cSurfaceBitmapInfo;
117 size_t m_uPitchBytes;
127 , m_uPitchBytes(uPitchBytes)
128 , m_ePixelFormat(ePixelFormat)
130 ASSERT(isReasonableInfo());
134 this->SetBitmapInfo(pBMI);
159 return ABS(m_Size.cy);
170 return m_Size.cy >= 0;
175 return cWinSize(m_Size.cx, get_Height());
180 return m_uPitchBytes;
185 m_uPitchBytes = uPitchBytes;
191 return m_ePixelFormat;
196 return get_Height() * get_PitchBytes();
200 return GetBitsPerPixel(m_ePixelFormat);
212 if (cx <= 0 || cx > kMaxX)
215 if (cy <= 0 || cy > kMaxY)
217 if (m_uPitchBytes <= 0 || m_uPitchBytes > kMaxX * 4)
219 if (m_ePixelFormat <= SURF_FORM_UNKNOWN || m_ePixelFormat >=
SURF_FORM_QTY)
228 if (m_Size.cx < 0 || m_Size.cx > kMaxX)
231 if (cy < 0 || cy > kMaxY)
233 if (m_uPitchBytes > kMaxX * 4)
235 if (m_ePixelFormat < SURF_FORM_UNKNOWN || m_ePixelFormat >=
SURF_FORM_QTY)
241 if (m_Size.cx != rInfo.m_Size.cx)
243 if (m_Size.cy != rInfo.m_Size.cy)
245 if (m_uPitchBytes != rInfo.m_uPitchBytes)
247 if (m_ePixelFormat != rInfo.m_ePixelFormat)
254 m_Size = rInfo.m_Size;
255 m_uPitchBytes = rInfo.m_uPitchBytes;
256 m_ePixelFormat = rInfo.m_ePixelFormat;
257 ASSERT(isReasonableInfo());
263 m_uPitchBytes = uPitchBytes;
264 m_ePixelFormat = ePixelFormat;
280 const size_t nAlignBits = nAlignBytes *
cBits::k_8;
281 return (((nBitsTotal + nAlignBits - 1) / nAlignBits) * nAlignBytes);
288 const BIT_SIZE_t uBitsPerPixel = GetBitsPerPixel(ePixelFormat);
289 ASSERT(uBitsPerPixel > 0);
290 InitSurfaceInfo(cx, cy, CvtBitsToAlignedBytes(cx * uBitsPerPixel, nAlignBytes), ePixelFormat);
303 void SetBitmapInfo(
const BITMAP& bm);
322 SetSurfaceInfo(rInfo);
332 switch (this->bmiHeader.biCompression)
340 bool isValidInfo()
const;
346 return (
PIXELS_t)this->bmiHeader.biWidth ;
352 return ABS((
int)this->bmiHeader.biHeight) ;
359 return this->bmiHeader.biHeight;
365 this->bmiHeader.biHeight =
ABS(this->bmiHeader.biHeight);
374 if (this->bmiHeader.biHeight < 0)
381 return((
BIT_SIZE_t)this->bmiHeader.biBitCount * this->bmiHeader.biPlanes);
385 void SetCopy(
const tagBITMAPINFO& rCopy);
387 size_t get_PitchBytes()
const;
390 WORD get_NumColors()
const;
395 return this->get_NumColors() *
sizeof(tagRGBQUAD);
401 return((tagRGBQUAD*)(((BYTE*)
const_cast<cSurfaceBitmapInfo*
>(
this)) + this->bmiHeader.biSize));
404 size_t get_SurfaceSize() const noexcept;
405 size_t get_ImageSize() const noexcept;
406 size_t get_TotalSize() const noexcept;
408 BYTE* get_PixelDataPtr() const;
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define CATTR_PACKED
Definition: GrayCore.h:87
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define ABS(n)
Definition: SysTypes.h:460
@ D3DFMT_DXT5
Definition: UseDX.h:198
@ D3DFMT_DXT2
Definition: UseDX.h:195
@ D3DFMT_DXT1
Definition: UseDX.h:194
@ D3DFMT_DXT4
Definition: UseDX.h:197
@ D3DFMT_DXT3
Definition: UseDX.h:196
#define ASSERT(exp)
Definition: cDebugAssert.h:87
#define DEBUG_CHECK(exp)
Definition: cDebugAssert.h:90
#define MAKEFOURCC(ch0, ch1, ch2, ch3)
Definition: cFourCC.h:24
Definition: cSurfaceInfo.h:308
PIXELS_t get_HeightRaw() const noexcept
Definition: cSurfaceInfo.h:354
bool isCompressed() const noexcept
Definition: cSurfaceInfo.h:329
void InitZero() noexcept
Definition: cSurfaceInfo.h:325
PIXELS_t get_Width() const noexcept
Definition: cSurfaceInfo.h:342
tagRGBQUAD * get_ColorTablePtr() const noexcept
Definition: cSurfaceInfo.h:397
size_t get_ColorSize() const noexcept
Definition: cSurfaceInfo.h:391
bool isTopDown() const noexcept
Definition: cSurfaceInfo.h:367
PIXELS_t get_Height() const noexcept
Definition: cSurfaceInfo.h:348
cSurfaceBitmapInfo() noexcept
Definition: cSurfaceInfo.h:316
BIT_SIZE_t get_BitsPerPixel() const noexcept
Definition: cSurfaceInfo.h:378
cSurfaceBitmapInfo(const cSurfaceInfo &rInfo)
Definition: cSurfaceInfo.h:320
void SetHeightTopDown() noexcept
Definition: cSurfaceInfo.h:362
Definition: cSurfaceInfo.h:109
bool isTopDown() const noexcept
Definition: cSurfaceInfo.h:166
void SetSurfaceInfo(const cSurfaceInfo &rInfo)
Definition: cSurfaceInfo.h:252
static constexpr size_t CvtBitsToAlignedBytes(UINT nBitsTotal, size_t nAlignBytes) noexcept
Definition: cSurfaceInfo.h:272
void SetBitmapInfo(const struct tagBITMAPINFOHEADER *pBMI)
Definition: cSurfaceInfo.h:294
cSurfaceInfo(const cSurfaceBitmapInfo *pBMI)
Definition: cSurfaceInfo.h:132
void SetBitmapInfo(const tagBITMAPINFO *pBMI)
Definition: cSurfaceInfo.h:298
cSurfaceInfo(struct tagBITMAPINFOHEADER *pBMI)
Definition: cSurfaceInfo.h:136
cSurfaceInfo(const tagBITMAPINFO *pBMI)
Definition: cSurfaceInfo.h:140
size_t get_BytesPerPixel() const noexcept
Definition: cSurfaceInfo.h:202
PIXELS_t get_HeightRaw() const noexcept
Definition: cSurfaceInfo.h:161
bool IsEqual(const cSurfaceInfo &rInfo) const noexcept
Definition: cSurfaceInfo.h:239
void InitAligned(PIXELS_t cx, PIXELS_t cy, size_t nAlignBytes, SURF_FORM_TYPE ePixelFormat)
Definition: cSurfaceInfo.h:283
bool isValidInfo() const noexcept
Definition: cSurfaceInfo.h:208
void InitSurfaceInfo(PIXELS_t cx=0, PIXELS_t cy=0, size_t uPitchBytes=0, SURF_FORM_TYPE ePixelFormat=SURF_FORM_UNKNOWN) noexcept
Definition: cSurfaceInfo.h:259
PIXELS_t get_Width() const noexcept
Definition: cSurfaceInfo.h:151
size_t get_PitchBytes() const noexcept
Definition: cSurfaceInfo.h:177
BIT_SIZE_t get_BitsPerPixel() const noexcept
Definition: cSurfaceInfo.h:198
cWinSize get_Size() const noexcept
Definition: cSurfaceInfo.h:172
bool isReasonableInfo() const noexcept
Definition: cSurfaceInfo.h:224
PIXELS_t get_Height() const noexcept
Definition: cSurfaceInfo.h:156
SURF_FORM_TYPE get_PixelFormat() const noexcept
Definition: cSurfaceInfo.h:188
size_t get_SurfaceSize() const noexcept
Definition: cSurfaceInfo.h:193
cSurfaceInfo(PIXELS_t cx=0, PIXELS_t cy=0, size_t uPitchBytes=0, SURF_FORM_TYPE ePixelFormat=SURF_FORM_UNKNOWN)
Definition: cSurfaceInfo.h:125
void put_PitchBytes(size_t uPitchBytes) noexcept
Definition: cSurfaceInfo.h:182
Definition: WinTypes.h:128
SURF_FORM_TYPE
Definition: cSurfaceInfo.h:24
@ SURF_FORM_R32F
grey scale 32 bit float. D3DFMT_R32F
Definition: cSurfaceInfo.h:50
@ SURF_FORM_ARGB8888
32 bit D3DFMT_A8R8G8B8 (DX format)
Definition: cSurfaceInfo.h:35
@ SURF_FORM_ABGR8888
GDI 32 bit format. D3DFMT_A8B8G8R8.
Definition: cSurfaceInfo.h:45
@ SURF_FORM_QTY
Definition: cSurfaceInfo.h:63
@ SURF_FORM_A8
8 bit alpha = D3DFMT_A8
Definition: cSurfaceInfo.h:42
@ SURF_FORM_D16
grey scale 16 bit unsigned. D3DFMT_D16
Definition: cSurfaceInfo.h:49
@ SURF_FORM_BGR888
24 bit (GDI format). NO Alpha channel.
Definition: cSurfaceInfo.h:44
@ SURF_FORM_RGB565
16 bit = D3DFMT_R5G6B5
Definition: cSurfaceInfo.h:38
@ SURF_FORM_RGB888
24 bit D3DFMT_R8G8B8 (DX format). NO Alpha channel.
Definition: cSurfaceInfo.h:33
@ SURF_FORM_D32
grey scale 32 bit unsigned. D3DFMT_D32
Definition: cSurfaceInfo.h:48
@ SURF_FORM_UNKNOWN
AKA D3DFMT_UNKNOWN.
Definition: cSurfaceInfo.h:32
@ SURF_FORM_XRGB1555
16 bit
Definition: cSurfaceInfo.h:39
@ SURF_FORM_XRGB8888
32 bit D3DFMT_X8R8G8B8 (DX format). Ignored Alpha channel.
Definition: cSurfaceInfo.h:36
@ SURF_FORM_ARGB1555
16 bit 555 RGB + 1 A. 1 bit Alpha channel.
Definition: cSurfaceInfo.h:41
@ SURF_FORM_XBGR8888
GDI 32 bit format. D3DFMT_X8B8G8R8. Ignored Alpha channel.
Definition: cSurfaceInfo.h:46
@ SURF_FORM_A1
1 alpha bit per pixel. (D3DFMT_A1)
Definition: cSurfaceInfo.h:52
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
static const BYTE k_8
represent the 8 bits in a byte. BIT_ENUM_t
Definition: cBits.h:52
static void Zero(void *pData, size_t nSizeBlock) noexcept
Definition: cMem.h:100