游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1517|回复: 1

GDI中如何实现图形旋转 wxh zt

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2004-12-13 21:33:00 | 显示全部楼层 |阅读模式
HBITMAP GetRotatedBitmapNT_FixCenter( HBITMAP hBitmap, float radians, COLORREF clrBack )
{
CDC sourceDC, destDC;
sourceDC.CreateCompatibleDC( NULL );
destDC.CreateCompatibleDC( NULL );

BITMAP bm;
::GetObject( hBitmap, sizeof( bm ), &bm );

float cosine = (float)cos(radians);
float sine = (float)sin(radians);

HBITMAP hbmResult = ::CreateCompatibleBitmap(CClientDC(NULL), bm.bmWidth, bm.bmHeight);

HBITMAP hbmOldSource = (HBITMAP)::SelectObject( sourceDC.m_hDC, hBitmap );
HBITMAP hbmOldDest = (HBITMAP)::SelectObject( destDC.m_hDC, hbmResult );

HBRUSH hbrBack = CreateSolidBrush( clrBack );
HBRUSH hbrOld = (HBRUSH)::SelectObject( destDC.m_hDC, hbrBack );
destDC.PatBlt( 0, 0, bm.bmWidth, bm.bmHeight, PATCOPY );

:eleteObject( ::SelectObject( destDC.m_hDC, hbrOld ) );

float x0,y0,rad;
x0=(float)bm.bmWidth/2;
y0=(float)bm.bmHeight/2;
rad=(float)sqrt(x0*x0+y0*y0);

SetGraphicsMode(destDC.m_hDC, GM_ADVANCED);
XFORM xform;
xform.eM11 = cosine;
xform.eM12 = sine;
xform.eM21 = -sine;
xform.eM22 = cosine;
xform.eDx =(float) ( x0 - rad*cos(PI/4.0+radians) );
xform.eDy = (float)( y0 - rad*(sin(PI/4.0+radians)) );

SetWorldTransform( destDC.m_hDC, &xform );
destDC.BitBlt(0,0,bm.bmWidth, bm.bmHeight, &sourceDC, 0, 0, SRCCOPY );
::SelectObject( sourceDC.m_hDC, hbmOldSource );
::SelectObject( destDC.m_hDC, hbmOldDest );

return hbmResult;
}


__________________

11

主题

102

帖子

102

积分

注册会员

Rank: 2

积分
102
发表于 2004-12-14 13:11:00 | 显示全部楼层

Re:GDI中如何实现图形旋转 wxh zt

那能不能旋?的同?r
?加上?放?可以?Alpha的半透明呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-23 16:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表