请问各位C博客大神MFC如何实现对 PNG图片的旋转

zhaoyijie888 2015-08-10 03:47:45
最近工作遇到要对PNG图片实现旋转的功能,在线搜了很多发现都不能满足要求,有没大神可以指点一下,感激不尽啊


,最终实现效果是输入角度指针能在刻度盘上旋转对应的角度,有知道怎么旋转的大神求告知一下,感激不尽
...全文
210 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2015-08-11
  • 打赏
  • 举报
回复

CPaintDC dc(this); // device context for painting
// 指针
Image image(L"Indicator.png");
int w,h;
w=image.GetWidth();
h=image.GetHeight();
// 背景
CRect rect;
rect.SetRect(0,0,w,h);
// on memDC
CDC memDC;
memDC.CreateCompatibleDC(&dc);
HBITMAP hbmp=CreateCompatibleBitmap(dc.m_hDC,w,h);
memDC.SelectObject(hbmp);
Graphics graphics(memDC.m_hDC);
// argb 背景与对话框同色
SolidBrush brush1(Color(255,210,210,210));
graphics.FillRectangle(&brush1, 0, 0, w, h);
// background 画面板
Image imageBk(L"Pannel.png");
TextureBrush brush(&imageBk);
graphics.FillRectangle(&brush,0,0,w,h);//
// moveto center
graphics.TranslateTransform((REAL)(w/2),(REAL)(h/2));
// ratate 90 degree
graphics.RotateTransform(131.0);// 原图有 offset = 42.0 degree
// move back
graphics.TranslateTransform((REAL)(-w/2),(REAL)(-h/2));
// draw indicator 指针
graphics.DrawImage(&image,0,0,w,h);
// draw to screen
HDC hdc = graphics.GetHDC();
::BitBlt(dc.m_hDC,0,0,w,h,hdc,0,0,SRCCOPY);
graphics.ReleaseHDC(hdc);

zhaoyijie888 2015-08-11
  • 打赏
  • 举报
回复
楼上大神,两个图合起来怎么整啊?我还是弄不好啊
shiter 2015-08-10
  • 打赏
  • 举报
回复
顶楼上,真厉害,那啥,四个通道呢,估计得注意一下这点
schlafenhamster 2015-08-10
  • 打赏
  • 举报
回复

CPaintDC dc(this); // device context for painting

Image image(L"Indicator.png");
int w,h;
w=image.GetWidth();
h=image.GetHeight();

CRect rect;
rect.SetRect(0,0,w,h);
//
CDC memDC;
memDC.CreateCompatibleDC(&dc);
HBITMAP hbmp=CreateCompatibleBitmap(dc.m_hDC,w,h);
memDC.SelectObject(hbmp);
// memDC
Graphics graphics(memDC.m_hDC);
// argb
SolidBrush brush(Color(128,128,255,255));
graphics.FillRectangle(&brush,0,0,w,h);//
//
graphics.TranslateTransform((REAL)(w/2),(REAL)(h/2));
graphics.RotateTransform(45.0);
graphics.TranslateTransform((REAL)(-w/2),(REAL)(-h/2));
graphics.DrawImage(&image,0,0,w,h);
HDC hdc = graphics.GetHDC();
::BitBlt(dc.m_hDC,0,0,w,h,hdc,0,0,SRCCOPY);
graphics.ReleaseHDC(hdc);


CPaintDC dc(this); // device context for painting

Image image(L"Indicator.png");
int w,h;
w=image.GetWidth();
h=image.GetHeight();

CRect rect;
rect.SetRect(0,0,w,h);
//
CDC memDC;
memDC.CreateCompatibleDC(&dc);
HBITMAP hbmp=CreateCompatibleBitmap(dc.m_hDC,w,h);
memDC.SelectObject(hbmp);
// memDC
Graphics graphics(memDC.m_hDC);
// argb
SolidBrush brush(Color(128,128,255,255));
graphics.FillRectangle(&brush,0,0,w,h);//
//
graphics.TranslateTransform((REAL)(w/2),(REAL)(h/2));
graphics.RotateTransform(45.0);
graphics.TranslateTransform((REAL)(-w/2),(REAL)(-h/2));
graphics.DrawImage(&image,0,0,w,h);
HDC hdc = graphics.GetHDC();
::BitBlt(dc.m_hDC,0,0,w,h,hdc,0,0,SRCCOPY);
graphics.ReleaseHDC(hdc);[/code]
[/code]

阿源是少年 2015-08-10
  • 打赏
  • 举报
回复
BeanJoy 2015-08-10
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
这种东西我觉得还是预先把各个角度的模板图存好靠谱,图像变换得来的效果可能会有视觉上的影响

19,468

社区成员

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

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