mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
61 lines
1.9 KiB
C++
61 lines
1.9 KiB
C++
#ifndef _INSIDE_VISUAL_CPP_CDIB
|
|
#define _INSIDE_VISUAL_CPP_CDIB
|
|
|
|
class CDib : public CObject
|
|
{
|
|
enum Alloc {noAlloc, crtAlloc, heapAlloc}; // applies to BITMAPINFOHEADER
|
|
DECLARE_SERIAL(CDib)
|
|
|
|
public:
|
|
|
|
LPVOID m_lpvColorTable;
|
|
HBITMAP m_hBitmap;
|
|
LPBYTE m_lpImage; // starting address of DIB bits
|
|
LPBITMAPINFOHEADER m_lpBMIH; // buffer containing the BITMAPINFOHEADER
|
|
|
|
private:
|
|
|
|
HGLOBAL m_hGlobal; // for external windows we need to free; could be allocated by this class or allocated externally
|
|
Alloc m_nBmihAlloc;
|
|
Alloc m_nImageAlloc;
|
|
DWORD m_dwSizeImage; // of bits—not BITMAPINFOHEADER or BITMAPFILEHEADER
|
|
int m_nColorTableEntries;
|
|
|
|
HANDLE m_hFile;
|
|
HANDLE m_hMap;
|
|
LPVOID m_lpvFile;
|
|
HPALETTE m_hPalette;
|
|
|
|
public:
|
|
|
|
CDib();
|
|
CDib(CSize size, int nBitCount); // builds BITMAPINFOHEADER
|
|
~CDib();
|
|
int GetSizeImage() {return m_dwSizeImage;}
|
|
int GetSizeHeader()
|
|
{return sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;}
|
|
CSize GetDimensions();
|
|
BOOL AttachMapFile(const char* strPathname, BOOL bShare = FALSE);
|
|
BOOL CopyToMapFile(const char* strPathname);
|
|
BOOL AttachMemory(LPVOID lpvMem, BOOL bMustDelete = FALSE, HGLOBAL hGlobal = NULL);
|
|
BOOL Draw(CDC* pDC, CPoint origin, CSize size); // until we implement CreateDibSection
|
|
HBITMAP CreateSection(CDC* pDC = NULL);
|
|
UINT UsePalette(CDC* pDC, BOOL bBackground = FALSE);
|
|
BOOL MakePalette();
|
|
BOOL SetSystemPalette(CDC* pDC);
|
|
BOOL Compress(CDC* pDC, BOOL bCompress = TRUE); // FALSE means decompress
|
|
HBITMAP CreateBitmap(CDC* pDC);
|
|
BOOL Read(CFile* pFile);
|
|
BOOL ReadSection(CFile* pFile, CDC* pDC = NULL);
|
|
BOOL Write(CFile* pFile);
|
|
void Serialize(CArchive& ar);
|
|
void Empty();
|
|
|
|
private:
|
|
|
|
void DetachMapFile();
|
|
void ComputePaletteSize(int nBitCount);
|
|
void ComputeMetrics();
|
|
};
|
|
|
|
#endif // _INSIDE_VISUAL_CPP_CDIB
|