hdc为上下文设备句柄;(XDest, YDest)为目标矩形区域的左上角坐标;nDestWidth和nDestHeight分别为目标矩形区的宽度和高度;(XSrc, YSrc)为源矩形的左上角坐标;nSrcWidth和nSrcHeight分别为源矩形的宽和高;lpBits为存放位图图像位值的地址;lpBitsInfo为BITMAPINFO类型的结构指针;iUsage指明使用的颜色类型;dwRop代表光栅操作类型。该函数的功能是从设备无关位图(lpBits指明)中指明的矩形区域拷贝颜色数据到目标矩形区域。如果目标矩形比源矩形大,函数将对颜色数据的行和列进行拉伸,以匹配目标矩形;如果目标矩形比源矩形小,则通过使用指定的光栅操作对行列进行压缩。
4 缩放函数及BMP类
为了说明缩放函数的具体用法,设计了一个名为CMyBitmap的BMP类,将缩放函数Zoom作为BMP类的一个成员函数,同时,应用Zoom函数实现位图的缩放显示。CMyBitmap的类声明如下:
class CMyBitmap
{
public:
CMyBitmap(); //构造函数
~CMyBitmap(); //析构函数
bool LoadImg(char FileName[]); //根据文件名读入位图数据
WORD DIBNumColors(LPSTR lpbi);
WORD PaletteSize(LPSTR lpbi); //计算调色板大小
bool Zoom(double scale); //图像平滑缩放函数
BOOL Draw( CDC *pDC, bool m_gdi_draw=true,int nX=0, int nY=0, int nWidth=-1, int nHeight=-1 ); //图像绘制函数
BOOL SetPalette(CDC *pDC);
long m_Width; //图像实际宽度
long m_Height; //图像实际高度
long m_datasize; //数据区的大小
long LineBytes; //每行像素占的字节数
BITMAPFILEHEADER *bmfHeader; //文件头信息
BITMAPINFO *bInfo;
CPalette m_Palette; //调色板信息
RGBQUAD *m_pPalette;
int m_nPaletteEntries;
WORD m_wBitCount; //BMP类型 BYTE *m_PixelBuffer,*m_FileBuffer;//像素区指针,文件开始指针
|