如何截取图像的某一指定范围显示出来?

冰壶2013 2000-08-26 01:12:00
如何截取图像的某一指定范围,然后显示出来?
请给出函数及用法!谢谢!
...全文
354 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dzl 2000-08-28
  • 打赏
  • 举报
回复
问题还没有解决吗?具体如下:

1.首先加入位图资源IDB_BITMAP1,然后在CYourView中加入成员
CBitmap* m_pBitmap;

2.在CYourView::OnCreate中加入:
m_pBitmap->LoadBitmap(IDB_BITMAP1);

3.在CYourView::OnDraw中加入:
BITMAP m_bBitmap;
m_pBitmap->GetBitmap(&m_bBitmap);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(m_pBitmap);

pDC->StretchBlt(200,100, m_bBitmap.bmWidth/2,m_bBitmap.bmHeight, &memDC,
m_bBitmap.bmWidth/2,0, m_bBitmap.bmWidth/2,m_bBitmap.bmHeight, SRCCOPY);

pDC->StretchBlt(200+m_bBitmap.bmWidth/2,100,m_bBitmap.bmWidth/2,m_bBitmap.bmHeight, &memDC,
0,0, m_bBitmap.bmWidth/2,m_bBitmap.bmHeight, SRCCOPY);

memDC.DeleteDC();
dzl 2000-08-26
  • 打赏
  • 举报
回复
这样更容易,利用CBitmap::LoadBitmap首先把资源装入CBitmap中,然后用StretchBlt函数显示出来就行了,其中StretchBlt函数的第6-9个参数是指定区域的,既然可以指定区域,想显示哪一部分都没问题了。
冰壶2013 2000-08-26
  • 打赏
  • 举报
回复
我是想把在资源中的图像分隔成许多块来显示,而不是取窗口中的图像!
能不能直接从图像的ID来取图像的某个范围??
dzl 2000-08-26
  • 打赏
  • 举报
回复
1.加入类成员
CBitmap* m_pBitmap;
CRect rect;

2.截取图像的某一指定范围
rect=CRect(,,,);//指定范围(相对窗口)
CPaintDC dc(this);
m_pBitmap=new CBitmap;
m_pBitmap->CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
CDC memDC;
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(m_pBitmap);
memDC.StretchBlt(0, 0, rect.Width(),rect.Height(), &dc,
rect.left, rect.top, rect.Width(),rect.Height(), SRCCOPY);
memDC.DeleteDC();

3.重绘
CDC* dc=GetDC();
CDC memDC;
memDC.CreateCompatibleDC(dc);
memDC.SelectObject(m_pBitmap);
dc->BitBlt(0, 0, rect.Width(), rect.Height(),&memDC, 0, 0, SRCCOPY);
memDC.DeleteDC();
dzl 2000-08-26
  • 打赏
  • 举报
回复
1.加入类成员
CBitmap* m_pBitmap;
CRect rect;

2.截取图像的某一指定范围
rect=CRect(,,,);//指定范围(相对窗口)
CPaintDC dc(this);
m_pBitmap=new CBitmap;
m_pBitmap->CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
CDC memDC;
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(m_pBitmap);
memDC.StretchBlt(0, 0, rect.Width(),rect.Height(), &dc,
rect.left, rect.top, rect.Width(),rect.Height(), SRCCOPY);
memDC.DeleteDC();

3.重绘
CDC memDC;
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(m_pBitmap);
dc.BitBlt(0, 0, rect.Width(), rect.Height(),&memDC, 0, 0, SRCCOPY);
memDC.DeleteDC();

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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