有没有什么方法可以简单、快速的实现90度、180度、270度旋转贴图?

Sime507 2005-08-03 11:25:18
90度、180度、270度三种标准贴图,要求是GDI编程方式!
...全文
212 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gcin2008 2006-06-28
  • 打赏
  • 举报
回复
int xcenter,ycenter;int width,height;int srcx,srcy;
double sinA,cosA;
width=height=135;xcenter=(width+1)/2;ycenter=(height+1)/2;
CClientDC dc(this);
CDC hdc,memdc;
CBitmap bitmap,*oldbitmap;
CBitmap hbitmap,*holdbitmap;

bitmap.LoadBitmap(IDB_BITMAP2);
hbitmap.LoadBitmap(IDB_BITMAP1);

memdc.CreateCompatibleDC(&dc);
hdc.CreateCompatibleDC(&dc);

oldbitmap =memdc.SelectObject(&bitmap);
holdbitmap=hdc.SelectObject(&hbitmap);
angle+=(90/180.0)*3.1415926;//旋转度数
sinA=sin(angle);cosA=cos(angle);
for(int i=0;i<height;i++) {
for(int j=0;j<width;j++) {
srcx=(i-xcenter)*cosA-(j-ycenter)*sinA+xcenter;
srcy=(i-xcenter)*sinA-(j-ycenter)*cosA+ycenter;
if(srcx>=0&&srcx<=width&&srcy>=0&&srcy<=height)
BitBlt(memdc,j,i,1,1,hdc,srcx,srcy,SRCCOPY);
}
}

::BitBlt(dc,0,0,width,height,memdc,0,0,SRCCOPY);

memdc.SelectObject(holdbitmap);
hdc.SelectObject(oldbitmap);

memdc.DeleteDC();
hdc.DeleteDC();

DeleteObject(bitmap);
DeleteObject(hbitmap);
这个是绕中心旋转的
gcin2008 2006-06-28
  • 打赏
  • 举报
回复
90,180,270旋转很简单,GDI足够。任意角度的话需要些方法,本人正在苦学中。QQ:397191171,一起学习呀。
Sime507 2005-08-05
  • 打赏
  • 举报
回复
谢谢,我还是用图像处理软件做吧,虽然程序大点,可是运行时不用算,执行速度快啊!
魔芋 2005-08-04
  • 打赏
  • 举报
回复
自己算吧,矩阵的旋转?忘光了
vcmute 2005-08-04
  • 打赏
  • 举报
回复
本来操作lpbi数据区即可,但要求GDI...

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧