如何对图片进行放大或缩小

xf_pan 2009-06-15 02:28:23
我有一个函数,功能是显示程序里用到的画图,现在需要加一个放大或是缩小功能,没做过这方面的,没思路了,有谁做个吗,大家讨论下吧,

_VOID Canvas_Flip(_HANDLE hCanvas, _INT nX, _INT nY, _INT nWidth, _INT nHeight)
{
HDC hDC = (HDC)::SendMessage(SimulatorData.m_hMainFrame, UM_GetDrawDevices, NULL, NULL);
_CANVASOBJECT* pCanvas = (_CANVASOBJECT*)hCanvas;
if (hDC && pCanvas)
{
_RECT rect;
GetScreenRect(&rect);

if ((MediaPlayerRect.nWidth <= 0) || (MediaPlayerRect.nHeight <= 0))
BitBlt(hDC, rect.nLeft + nX, rect.nTop + nY, nWidth, nHeight, pCanvas->hMemDC, nX, nY, SRCCOPY);
else
{

_INT x1 = nX, x2 = MediaPlayerRect.nLeft, x3 = MediaPlayerRect.nLeft + MediaPlayerRect.nWidth, x4 = nX + nWidth;
_INT y1 = nY, y2 = MediaPlayerRect.nTop, y3 = MediaPlayerRect.nTop + MediaPlayerRect.nHeight, y4 = nY + nHeight;
if (x4 > x1 > 0 && y2 > y1)
BitBlt(hDC, rect.nLeft + x1, rect.nTop + y1, x4 - x1, y2 - y1, pCanvas->hMemDC, x1, y1, SRCCOPY);
if (x2 > x1 > 0 && y3 > y2)
BitBlt(hDC, rect.nLeft + x1, rect.nTop + y2, x2 - x1, y3 - y2, pCanvas->hMemDC, x1, y2, SRCCOPY);
if (x4 > x3 > 0 && y3 > y2)
BitBlt(hDC, rect.nLeft + x3, rect.nTop + y2, x4 - x3, y3 - y2, pCanvas->hMemDC, x3, y2, SRCCOPY);
if (x4 > x1 > 0 && y4 > y3)
BitBlt(hDC, rect.nLeft + x1, rect.nTop + y3, x4 - x1, y4 - y3, pCanvas->hMemDC, x1, y3, SRCCOPY);
}

}
::SendMessage(SimulatorData.m_hMainFrame, UM_ReleaseDrawDevices, (WPARAM)hDC, NULL);
}
...全文
143 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sou2012 2009-06-15
  • 打赏
  • 举报
回复
学习了!
xf_pan 2009-06-15
  • 打赏
  • 举报
回复
非常感谢大家,,问题解决了。。
mxhbj 2009-06-15
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20050413/09/3931691.html

  • 打赏
  • 举报
回复
光宇广贞 2009-06-15
  • 打赏
  • 举报
回复
ltc_mouse 2009-06-15
  • 打赏
  • 举报
回复
StretchBlt/SetStretchBltMode 就能实现缩放吧
aaaa3105563 2009-06-15
  • 打赏
  • 举报
回复
UP

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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