hDc=GetDC(hWnd) if(hBitmapl=NULL) DeleteObject( hBitmap),∥释放原来的位图句柄 ∥产生新的位图 hBitmap=CreateDI Bitmap(hDc, (LPBITMAPINFOHEADER)IpTemplmg Data, (LONG )CBM INIT (LPSTR)lp Templmg Data+ sizeof( BI TMAPINFOHEADER)+ Num Colors*sizeof(RGBQUAD) (LPBITMAPINFOIp TemplmgData DIB RGB COLORS) ∥将平移后的图象存成文件 hf- creat("c: I translation. bmp",O) Iwrite(hf, ( LPSTR)&bf, sizeof( BITMAPFILEHEADER)) Iwrite(hf, LPSTR)lp Templmg Data, BufSize) Iclose(hf); ∥释放资源和内存 ReleaseDC(hWnd, hDc) LocalUnlock(hTemplmg Data); ocal Free(hTemplmg Data) GlobalUnlock(hlmg Data) return trUE 22旋转 旋转( rotation)有一个绕着什么转的问题,通常的做法是以图象的中心为圆心旋转,举个例子, 图27旋转30度(顺时针方向)后如图28所示: 图27旋转前的图} } hDc=GetDC(hWnd); if(hBitmap!=NULL) DeleteObject(hBitmap); //释放原来的位图句柄 //产生新的位图 hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData, (LONG)CBM_INIT, (LPSTR)lpTempImgData+ sizeof(BITMAPINFOHEADER) + NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS); //将平移后的图象存成文件 hf=_lcreat("c:\\translation.bmp",0); _lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER)); _lwrite(hf,(LPSTR)lpTempImgData,BufSize); _lclose(hf); //释放资源和内存 ReleaseDC(hWnd,hDc); LocalUnlock(hTempImgData); LocalFree(hTempImgData); GlobalUnlock(hImgData); return TRUE; } 2.2 旋转 旋转(rotation)有一个绕着什么转的问题,通常的做法是以图象的中心为圆心旋转,举个例子, 图 2.7 旋转 30 度(顺时针方向)后如图 2.8 所示: 图 2.7 旋转前的图