📄 dib.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 + -