當前位置:編程學習大全網 - 編程語言 - 編程繪圖紙

編程繪圖紙

縮放:StretchBlt圖片任意角度翻轉:hbit map cbardemoview::getRotatedBitmapnt(hbit map hbit map,float radians,colorref clr back)。

{

//創建與顯示器兼容的內存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

}

  • 上一篇:激發孩子的想象力——我的瘋狂發明書
  • 下一篇:蘇州科技大學江楓校區怎麽樣?
  • copyright 2024編程學習大全網