{
//創建與顯示器兼容的內存DC
CDC sourceDC,destDC
sourceDC。CreateCompatibleDC(NULL);
destDC。CreateCompatibleDC(NULL);//獲取邏輯坐標
位圖BM;
* GetObject(hbit map,sizeof( bm),& ampBM);浮點余弦=(浮點)cos(弧度/180 * PI);
float sine = (float)sin(弧度/180 * PI);int x 1 =(int)(BM . BM height * sine);
int y1 = (int)(bm.bmHeight *余弦);
int x2 = (int)(bm.bmWidth *余弦+ bm.bmHeight *正弦);
int y2 = (int)(bm.bmHeight *余弦- bm.bmWidth *正弦);
int x3 = (int)(bm.bmWidth *余弦);
int y3 =(int)(-BM . BM width * sine);int minx = min(0,min(x1,min(x2,x3));
int miny = min(0,min(y1,min(y2,y3)));
int maxx = max(0,max(x1,max(x2,x3)));
int maxy = max(0,max(y1,max(y2,y3)));int w = maxx-minx;
int h = maxy-miny;//創建壹個位圖來保存結果
hbit map hbm result =::CreateCompatibleBitmap(CClientDC(NULL),w,h);hbit map hbmOldSource =(hbit map)::select object(sourcedc . m _ hDC,hbit map);
hbit map hbmoldest =(hbit map)::select object(dest DC . m _ hDC,hbm result);//在我們更改映射模式之前繪制背景色
HBRUSH HBR back = CreateSolidBrush(clr back);
HBRUSH hbrOld =(HBRUSH)::select object(dest DC . m _ hDC,HBR back);
destDC。PatBlt( 0,0,w,h,pat copy);
* delete object(::select object(dest DC . m _ hDC,HB rold));//我們將使用世界變換來旋轉位圖
SetGraphicsMode(destDC.m_hDC,GM _ ADVANCED);
XFORM xform
xform.eM11 =余弦;
xform . em 12 =-sine;
xform.eM21 =正弦;
xform.eM22 =余弦;
xform . EDX =(float)-minx;
xform . edy =(float)-miny;SetWorldTransform( destDC.m_hDC,& ampxform);//現在進行實際的旋轉——壹次壹個像素
destDC。BitBlt(0,0,bm.bmWidth,bm.bmHeight,& ampsourceDC,0,0,src copy);nWidth[m _ count]= BM . BM width;
n height[m _ count]= BM . BM height;//恢復DCs
* select object(sourcedc . m _ hDC,hbmOldSource);
* select object(dest DC . m _ hDC,hbmoldest);返回hbmResult
}