www.pudn.com > ImageCheck.rar > CaiImage.h
// CaiImage.h: interface for the CCaiImage class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CAIIMAGE_H__AA2784A7_7E88_49C5_8F83_49ADA49A0625__INCLUDED_)
#define AFX_CAIIMAGE_H__AA2784A7_7E88_49C5_8F83_49ADA49A0625__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
const int RLE_COMMAND = 0;
const int RLE_ENDOFLINE = 0;
const int RLE_ENDOFBITMAP = 1;
const int RLE_DELTA = 2;
#define BFT_ICON 0x4349 /* 'IC' */
#define BFT_BITMAP 0x4d42 /* 'BM' */
#define BFT_CURSOR 0x5450 /* 'PT' */
#ifndef WIDTHBYTES
#define WIDTHBYTES(i) ((unsigned)((i+31)&(~31))/8) /* ULONG aligned ! */
#endif
#define DibWidthBytesN(lpbi, n) (UINT)WIDTHBYTES((UINT)(lpbi)->biWidth * (UINT)(n))
#define DibWidthBytes(lpbi) DibWidthBytesN(lpbi, (lpbi)->biBitCount)
#define DibSizeImage(lpbi) ((lpbi)->biSizeImage == 0 \
? ((DWORD)(UINT)DibWidthBytes(lpbi) * (DWORD)(UINT)(lpbi)->biHeight) \
: (lpbi)->biSizeImage)
#define DibNumColors(lpbi) ((lpbi)->biClrUsed == 0 && (lpbi)->biBitCount <= 8 \
? (int)(1 << (int)(lpbi)->biBitCount) \
: (int)(lpbi)->biClrUsed)
#define FixBitmapInfo(lpbi) if ((lpbi)->biSizeImage == 0) \
(lpbi)->biSizeImage = DibSizeImage(lpbi); \
if ((lpbi)->biClrUsed == 0) \
(lpbi)->biClrUsed = DibNumColors(lpbi);
#define RGB2GRAY(r,g,b) (((b)*117 + (g)*601 + (r)*306) >> 10)
class CCaiImage
{
public:
CCaiImage();
virtual ~CCaiImage();
public:
static int CompareColors(const void *elem1, const void *elem2);
bool Median(long Ksize);
void DrawImg(HDC hdc, CRect rect);
DWORD GetSize();
int GetBitCount();
BOOL CopyImg(CCaiImage* pImage);
BOOL SaveImg(CString strFileName);
void SetAutoFit(BOOL bAutoFit){m_bAutoFit=bAutoFit; }
void ToGray();
BOOL Destroy();
LONG GetHeight();
LONG GetWidth();
void SetPixelGray(LONG nx, LONG ny,BYTE bGray);
void SetPixelIndex(long x,long y,BYTE i);
BOOL SetPixel(LONG nx, LONG ny, RGBQUAD rgbQuad);
BYTE GetPixelGray(LONG nx,LONG ny);
RGBQUAD GetPaletteColor(BYTE idx);
BOOL GetPixel(LONG nx,LONG ny,RGBQUAD& rgbQuad);
void Flip();
DWORD GetPaletteSize();
RGBQUAD* GetPalette() const;
void* CreateImg(DWORD dwWidth, DWORD dwHeight, DWORD wBpp);
bool CreateFromArray(BYTE* pArray,DWORD dwWidth,DWORD dwHeight,DWORD dwBitsperpixel, DWORD dwBytesperline, bool bFlipImage);
BOOL LoadBMP(CString strFilePath);
BYTE* pDib; //contains the header, the palette, the pixels
protected:
BYTE GetNearestIndex(RGBQUAD c);
BYTE GetPixelIndex(long x,long y);
BYTE* GetBits(DWORD row=0);
void Bitfield2RGB(BYTE *src, WORD redmask, WORD greenmask, WORD bluemask, BYTE bpp);
BOOL DibReadBitmapInfo(CFile* fh, BITMAPINFOHEADER *pdib);
int m_nImgType;
BITMAPINFOHEADER head; //standard header
DWORD m_dwEffWidth;
CRect m_rtImgShow;
BOOL m_bIsPrepare;
BOOL m_bAutoFit;
DWORD m_dwSize;
};
#endif // !defined(AFX_CAIIMAGE_H__AA2784A7_7E88_49C5_8F83_49ADA49A0625__INCLUDED_)