1
0
mirror of https://github.com/DxWnd/DxWnd.reloaded synced 2024-12-30 09:25:35 +01:00
DxWnd.reloaded/host/bmpext.h

97 lines
2.0 KiB
C
Raw Normal View History

#pragma once
#include "afxtempl.h"
//MakeRgn helper data definition
typedef CTypedPtrList< CPtrList, LPRECT > RECTLIST;
//////////////////////////////////////////////////////////////////////////
// DD Bitmap draw extensions class
class AFX_EXT_CLASS CDDBDrawEx
{
public:
CDDBDrawEx(CDC* pDC, CBitmap* pbmSrc, CBitmap* pbmBack = NULL);
virtual ~CDDBDrawEx();
void Fill(CRect& rDest);
void Draw(CRect& rDest, CPoint& pntSrc);
void DrawTransparent(CRect& rDest, CPoint& pntSrc, COLORREF crMask );
HRGN MakeRgn(COLORREF cTransparentColor = 0, COLORREF cTolerance = 0x101010);
private:
CDC* m_pDC;
CBitmap* m_pbmSrc;
CBitmap* m_pbmBack;
LPRGNDATA RectList2RGNDATA( RECTLIST& rl, RECT& rBound, int& iByteCount );
};
///////////////////////////////////////////////////////////////////////////
// DIB support classes
class CDibException
{
public:
//exception types: not enough memory, operation not supported, invalid pixel position
enum {E_NOMEM, E_NOTSUPP, E_INVPOS};
CDibException( int iReason ) : m_iReason(iReason) {}
static void Throw( int iReason ){ throw new CDibException(iReason); }
public:
int m_iReason;
};
class AFX_EXT_CLASS CDib
{
// Constructors
public:
CDib();
virtual ~CDib();
// Attributes
protected:
LPBYTE m_pBits;
LPBITMAPINFO m_pBMI;
public:
CPalette* m_pPalette;
public:
DWORD Width() const;
DWORD Height() const;
WORD NumColors( BITMAPINFOHEADER& bmiHeader ) const;
BOOL IsValid() const;
void SetPixel( int iX, int iY, RGBQUAD& rgbPixel );
RGBQUAD GetPixel(int iX, int iY);
private:
void AssertPosition( int iX, int iY );
DWORD PaletteSize() const;
// Operations
public:
BOOL Draw(CDC*, CRect& rectDC, CRect& rectDIB) const;
DWORD Save(CFile& file) const;
DWORD Read(CFile& file, BOOL bFromResource = FALSE );
DWORD ReadFromResource(UINT nResID);
void Invalidate();
// Implementation
protected:
BOOL CreatePalette();
void Free();
public:
HBITMAP CreateDDBitmap(CDC* pDC);
HBITMAP CreateDDBitmap( HDC hDC );
BOOL Compress(CDC* pDC, BOOL bCompress );
protected:
CDib& operator = (CDib& dib);
};