简单问题(位图合并)

wwmwenzhu 2008-11-11 09:37:33
我将两个位图bitblt在同一个位置上,要两次bitblt,现在想把两个位图在内存(CDC)中合并以后一次(bitblt)出来??不知道明白我的意思不
...全文
229 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wrhwww 2008-11-12
  • 打赏
  • 举报
回复
楼主你说的到底是什么呀...很乱...

你说的合并是什么意思???两张图像合为一个???
如果是合并..是第二幅图像合为第一幅的下面还是右面...
假设是合并且是第二幅图像合并到第一幅图像的下面步骤:
1.分别读取两幅图像
2.得到两幅图像的大小
3.申请两幅图像大小的空间
4.比较两幅图像的宽度.如果是第一幅图像的宽度大于第二幅的那么就将刚申请的那个空间的宽度设为第一幅图像的宽度,否则设为第二幅图像的宽度,
5.分别将两幅图像拷入刚申请的那个空间里
6.修改文件头信息
7.显示
ringphone 2008-11-12
  • 打赏
  • 举报
回复
API代码:
HDC  hDC = GetDC(hWnd);
HDC hMemDC = CreateCompatibleDC(hDC);
HDC hSrcDC1 = CreateCompatibleDC(hDC);
HDC hSrcDC2 = CreateCompatibleDC(hDC);
HBITMAP hbm = CreateCompatibleBitmap(hWnd,width,height);

SelectObject(hMemDC,hbm);
SelectObject(hSrcDC1,hbmSrc);
SelectObject(hSrcDC2,hbmMask);

BitBlt(hMemDC,0,0,width,height,hSrcDC2,0,0,SRCAND);
BitBlt(hMemDC,0,0,width,height,hSrcDC1,0,0,SRCINVERT);

BitBlt(hDC,0,0,width,height,hMemDC,0,0,SRCCOPY);

DeleteDC(hSrcDC1);
DeleteDC(hSrcDC2);
DeleteDC(hMemDC);
ReleaseDC(hDC);
DeleteObject(hbm);


是这意思吗?
cnzdgs 2008-11-11
  • 打赏
  • 举报
回复
按你的说法,创建两个内存DC,分别选入两个位图,然后将其中较小的位图BitBlt到另一个上,再选出这两个位图,删除DC,就完成了。不过这样的效果是把一个位图覆盖到另一个上面。
wwmwenzhu 2008-11-11
  • 打赏
  • 举报
回复
原理知道,具体的操作不需要太关心,关键是如何把两个位图bitblt内存中,麻烦写几行代码,大概五六行代码就能实现,顺便说一下,两个位图一个是原位图,一个是该位图的MASK
Chendy1985 2008-11-11
  • 打赏
  • 举报
回复
双缓冲
在memorydc里面贴好,再画出来
The_eagles 2008-11-11
  • 打赏
  • 举报
回复
不知道你这里说的“合并”指的是什么?
如果你想用第2张图覆盖第1张图,用上面提到的方法。例子非常多。
如果你想实现什么效果,比如一张画面上能若隐若现地看到另一个画面等...
就需要+-*/ 操作了。不能简单地覆盖。

「已注销」 2008-11-11
  • 打赏
  • 举报
回复
使用内存位图,跟操作DC一样,BIIBLT你的两个位图到这个内存位图上,然后一次BITBLT出来就行了,去搜索一下双缓冲的内容,里面有对内存位图使用方法的介绍

19,464

社区成员

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

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