关于CBitmap读取图像的问题

ljn398431 2012-02-28 09:24:07
我用了
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BS2);
m_image1.SetBitmap(bitmap);

来读取并载入图像 我想把读取的图像进行处理下 进行放大或者缩小尺寸 请问该如何处理
...全文
223 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenbaibin2012 2012-03-02
  • 打赏
  • 举报
回复
这个只能加载资源位图,要加载本地图片 需要CImage
ljn398431 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhxingway 的回复:]
引用 7 楼 shn521 的回复:
CDC memDC;//定义一个设备上下文
memDC.CreateCompatibleDC(pDC);//创建兼容的设备上下文
CBitmap bmp;//定义位图对象
bmp.LoadBitmap(IDB_BKBITMAP);//加载位图
memDC.SelectObject(&bmp);//选中位图对象
pDC->BitBlt(30,……
[/Quote]那具体在哪里定义的 我在函数里定CDC pDC 报错啊
罗平 2012-02-28
  • 打赏
  • 举报
回复
用两个内存DC,用 StretchBlt 把源DC拷贝到目标DC,设置新图的高宽即可。



SetStretchBltMode(hDstDC,HALFTONE); //设置目标DC为HALFTONE模式
StretchBlt(hDstDC,0,0,iWidth2,iHeight2,hScrDC,0,0,iWidth,iHeight,SRCCOPY); //源位图DC拷贝到目标位图DC,使用拉伸模式
HBITBMP hBmpDst=(HBITMAP)SelectObject(hDstDC,hBmpDstOld); //获取目标DC位图
m_image1.SetBitmap(hBmpDst);



cbzjzsb123 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mdesigner 的回复:]
这个好像不行吧,我之前遇到这样问题的时候,都是重绘了小的图标。。
坐等高手简单方法~~
[/Quote]我也是先处理图像,再加载的
shn521 2012-02-28
  • 打赏
  • 举报
回复
BitBlt
Mdesigner 2012-02-28
  • 打赏
  • 举报
回复
这个好像不行吧,我之前遇到这样问题的时候,都是重绘了小的图标。。
坐等高手简单方法~~
ljn398431 2012-02-28
  • 打赏
  • 举报
回复
有人知道么
zhxingway 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 shn521 的回复:]
CDC memDC;//定义一个设备上下文
memDC.CreateCompatibleDC(pDC);//创建兼容的设备上下文
CBitmap bmp;//定义位图对象
bmp.LoadBitmap(IDB_BKBITMAP);//加载位图
memDC.SelectObject(&bmp);//选中位图对象
pDC->BitBlt(30,20,180,180,&memDC,1,1,SRCCOPY);//绘制位图
//以上是利用BitBlt来绘制位图
CRect rc(30,20,210,200);//定义一个区域
CBrush brush(RGB(0,0,0));//定义一个黑色的画刷
pDC->FrameRect(rc,&brush);//绘制矩形边框
//只是用来观察两者区别的,绘制一个矩形框
rc.OffsetRect(220,0);//移动区域
//下边是利用StretchBlt绘制的位图
BITMAP BitInfo;//定义位图结构
bmp.GetBitmap(&BitInfo);//获取位图信息
int x = BitInfo.bmWidth;//获取位图宽度
int y = BitInfo.bmHeight;获取位图高度
pDC->StretchBlt(rc.left,rc.top,rc.Width(),rc.Height(),&memDC,0,0,x,y,SRCCOPY);//绘制位图
pDC->FrameRect(rc,&brush);//绘制边框
brush.DeleteObject();//释放画刷
memDC.DeleteDC();//释放设备上下文
bmp.DeleteObject();//释放位图对象
[/Quote]

使用CDC和重画,都是内存操作,很快的
ljn398431 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cbzjzsb123 的回复:]
引用 2 楼 mdesigner 的回复:
这个好像不行吧,我之前遇到这样问题的时候,都是重绘了小的图标。。
坐等高手简单方法~~
我也是先处理图像,再加载的
[/Quote]怎么处理的?
shn521 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ljn398431 的回复:]
引用 7 楼 shn521 的回复:
C/C++ code
CDC memDC;//定义一个设备上下文
memDC.CreateCompatibleDC(pDC);//创建兼容的设备上下文
CBitmap bmp;//定义位图对象
bmp.LoadBitmap(IDB_BKBITMAP);//加载位图
memDC.SelectObject(&bmp);//选中位图对象
……
[/Quote]
StretchBlt修改里面的参数就能改变显示的大小啊。
ljn398431 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 shn521 的回复:]
C/C++ code
CDC memDC;//定义一个设备上下文
memDC.CreateCompatibleDC(pDC);//创建兼容的设备上下文
CBitmap bmp;//定义位图对象
bmp.LoadBitmap(IDB_BKBITMAP);//加载位图
memDC.SelectObject(&bmp);//选中位图对象
……
[/Quote]您好 我知道了这个图像的需要改变的尺寸 然后这个IDB_BS1的尺寸小 能不能直接改变bitmap的尺寸?
shn521 2012-02-28
  • 打赏
  • 举报
回复
	CDC memDC;//定义一个设备上下文
memDC.CreateCompatibleDC(pDC);//创建兼容的设备上下文
CBitmap bmp;//定义位图对象
bmp.LoadBitmap(IDB_BKBITMAP);//加载位图
memDC.SelectObject(&bmp);//选中位图对象
pDC->BitBlt(30,20,180,180,&memDC,1,1,SRCCOPY);//绘制位图
//以上是利用BitBlt来绘制位图
CRect rc(30,20,210,200);//定义一个区域
CBrush brush(RGB(0,0,0));//定义一个黑色的画刷
pDC->FrameRect(rc,&brush);//绘制矩形边框
//只是用来观察两者区别的,绘制一个矩形框
rc.OffsetRect(220,0);//移动区域
//下边是利用StretchBlt绘制的位图
BITMAP BitInfo;//定义位图结构
bmp.GetBitmap(&BitInfo);//获取位图信息
int x = BitInfo.bmWidth;//获取位图宽度
int y = BitInfo.bmHeight;获取位图高度
pDC->StretchBlt(rc.left,rc.top,rc.Width(),rc.Height(),&memDC,0,0,x,y,SRCCOPY);//绘制位图
pDC->FrameRect(rc,&brush);//绘制边框
brush.DeleteObject();//释放画刷
memDC.DeleteDC();//释放设备上下文
bmp.DeleteObject();//释放位图对象

StretchBlt实现放缩
ljn398431 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chinatcp 的回复:]
用两个内存DC,用 StretchBlt 把源DC拷贝到目标DC,设置新图的高宽即可。


C/C++ code


SetStretchBltMode(hDstDC,HALFTONE); //设置目标DC为HALFTONE模式
StretchBlt(hDstDC,0,0,iWidth2,iHeight2,hScrDC,0,0,iWidth,iHeight,SRCCOPY); //源……
[/Quote]你好 谢谢这位大侠 这个怎么把图像读取进去 可以再具体一些么

19,469

社区成员

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

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