⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dib.h

📁 电子监控的网络编程实例
💻 H
字号:
#ifndef _DIB_
#define _DIB_

//////////////////////////////////////////////////////////////////////////
// CDIB
// Handle to a DIB 
//DECLARE_HANDLE(HDIB);
// DIB constants 
#define PALVERSION   0x300
#define DIB_HEADER_MARKER   ((WORD) ('M' << 8) | 'B')
// DIB Macros
#define IS_WIN30_DIB(lpbi)  ((*(LPDWORD)(lpbi)) == sizeof(BITMAPINFOHEADER))
#define WIDTHBYTES(bits)    (((bits) + 31) / 32 * 4)
#define CHANGEFLAG	24
#include <vfw.h>
#include "ImageLoad.h"

class  CDIB:public CObject
{
public:
	CDIB();
	CDIB(CString csFileName);
	~CDIB();
	CDIB(const CDIB& Dib);
	CDIB(const CDIB* Dib);
	
	CDIB&	operator = (const CDIB& Dib)
	{
		if(this==&Dib)
			return	*this;

		DeleteObject();

		m_dwBitsSize=::GlobalSize(Dib.m_hDIB);
		
		m_hDIB = (HDIB)::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,
			m_dwBitsSize);
		LPSTR lpSour,lpDest;
		lpSour=(LPSTR)::GlobalLock(Dib.m_hDIB);
		lpDest=(LPSTR)::GlobalLock(m_hDIB);
		
		memcpy(lpDest,lpSour,m_dwBitsSize);
		m_lpBitmapInfoHeader=(LPBITMAPINFOHEADER)lpDest;
		m_lpDIB=(lpDest+ *(LPDWORD)lpDest+PaletteSize(lpDest));

		m_nWidth=Dib.m_nWidth;
		m_nHeight=Dib.m_nHeight;

		m_nWidthOfByte=WIDTHBYTES(m_nWidth*24);

		m_pPal=NULL;
		
		::GlobalUnlock(m_hDIB);
		::GlobalUnlock(Dib.m_hDIB);

		return *this;
	};

	BOOL Create(CString name);
	void DeleteObject();

	BOOL Create(CBitmap&	Bitmap);
	BOOL Create(HBITMAP	hBitmap);

	void Write(HDIB		hDIB);
	void WriteDIB(BYTE* bRed,BYTE* bGreen,BYTE* bBlue);

private:
	BOOL Convert2TrueColor();
	BOOL ReadDIBFile(CFile& file);

public:
	HDIB			m_hDIB;
	DWORD			m_dwBitsSize;			//除文件头之外的大小
	CString			m_strName;
	CString			m_strFileExt;
	CPalette*		m_pPal;
	int				m_nWidth,m_nHeight,m_nWidthOfByte;
	LPSTR			m_lpbi;
	LPSTR			m_lpDIB;
	LPLOGPALETTE	m_lpPal;

	LPBITMAPINFOHEADER	m_lpBitmapInfoHeader;

public:
	BOOL IsNULL();
	DWORD DIBWidthByByte();
	void Rotate(float fAngle);
	void Enlarge(CSize dSize);
	void InitDIBData();
	void ReplaceHDIB(HDIB hDIB);
	void Enlarge(CRect& sRect,CRect& dRect);
	void ReadAVIFile(PGETFRAME pframe,int frame);
	LPSTR FindDIBBits();
	void ReadBYTEFile(CFile& file,int size);
	BOOL SaveDIB(CFile& file);
	BOOL SaveDIB(CString csFileName);
	BOOL ReadDIBFile(CString csFileName);

	BOOL LoadJPG(CString filename);
	BOOL SaveJPG(CString filename,int	nQuality=100);


	BOOL PaintDIB(CDC*pDC,CRect dRect,CRect sRect);
	BOOL PaintDIB(HDC pDC,CRect dRect,CRect sRect);

	int  DIBWidth();
	int  DIBHeight();
	int  PaletteSize(LPSTR lpbi);
	int  DIBNumColors(LPSTR lpbi);

	void	Rotate(BOOL	bLeftOrRight=false);

	void	Traverse(float fAngle,bool bHorzOrVert=false);
	void	RectMapToCircle();
};

#endif //#define _DIB_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -