TransparentBlt 在双缓冲绘图下问题!!!!

不改是不可能的 2014-07-20 08:58:06
view里:
OnDraw下
CDC memDC;
CBitmap memBitmap;
CBitmap* pOldBitmap;
CRect client;
GetClientRect(client);
memDC.CreateCompatibleDC(pDC);
memBitmap.CreateCompatibleBitmap(pDC,client.Width().client.Height());
pOldBitmap=memDC.SelectObject(&memBitmap);

memDC.FillRect(client,&BkBrush);//绘制背景

pDoc->Draw(&memDC,this);//在此里面调用TransparentBlt 函数,该透明的地方只变成白色,不能透明,问何缘故????

pDC->BitBlt(......);
...全文
758 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
blueicescape 2015-09-12
  • 打赏
  • 举报
回复
对应的,画刷可以使用 CGdiObject* pOldPen = pDC->SelectStockObject(DC_BRUSH); 选入DC内,在进行填充绘制后,用TransparentBlt显示出来
blueicescape 2015-09-12
  • 打赏
  • 举报
回复
双缓冲绘图可以使用 TransparentBlt 绘图时,不要用普通的画笔CPen 或者画刷CBush 例如: 画笔可以使用 CGdiObject* pOldPen = pDC->SelectStockObject(DC_PEN); 代替 CPen Pen; pDC->SelectObject(&Pen);
  • 打赏
  • 举报
回复
在此请教一问题: http://bbs.csdn.net/topics/390849854?page=1#post-397924195 vs2010 如何实现 preview and thumbnail 在新建mfc向导里面设置了,但没有效果。
  • 打赏
  • 举报
回复
引用 14 楼 jimoguilai 的回复:
没有高见,不会,谢谢!
在此请教一问题: http://bbs.csdn.net/topics/390849854?page=1#post-397924195 vs2010 如何实现 preview and thumbnail 在新建mfc向导里面设置了,但没有效果。
Chivalry 2014-08-04
  • 打赏
  • 举报
回复
没有高见,不会,谢谢!
  • 打赏
  • 举报
回复
引用 11 楼 jimoguilai 的回复:
[quote=引用 10 楼 ielectronics 的回复:] [quote=引用 9 楼 draculamx 的回复:] 你先调用 TransparentBlt,然后又调用 bitblt,虽然你用 TransparentBlt 绘制到内存DC上是透明的,但是后面如果用bitblt绘制到设备DC上的时候,是不会保留透明效果的。。。 除非你在绘制到设备DC的时候,也使用 TransparentBlt 函数
你说得很对,正是这个问题.......[/quote] 我4楼也给你说了,呵呵,别人帮你看问题,顶多说下思路,一般不会亲自去帮你调试,还需要你自己去试[/quote] 因为我要手动绘图,为了防止闪烁,就做了两次缓冲。图像做透明是在CDC mem上面,设备pDC跟背景又做了一个CDC memDC缓冲。不知道你有何高见????
  • 打赏
  • 举报
回复
引用 9 楼 draculamx 的回复:
你先调用 TransparentBlt,然后又调用 bitblt,虽然你用 TransparentBlt 绘制到内存DC上是透明的,但是后面如果用bitblt绘制到设备DC上的时候,是不会保留透明效果的。。。 除非你在绘制到设备DC的时候,也使用 TransparentBlt 函数
在绘制到设备DC上,如果用TransparentBlt 的话,会闪烁,而且会影响背景颜色。因为必须TransparentBlt 必须指定透明颜色......
Chivalry 2014-07-28
  • 打赏
  • 举报
回复
引用 10 楼 ielectronics 的回复:
[quote=引用 9 楼 draculamx 的回复:] 你先调用 TransparentBlt,然后又调用 bitblt,虽然你用 TransparentBlt 绘制到内存DC上是透明的,但是后面如果用bitblt绘制到设备DC上的时候,是不会保留透明效果的。。。 除非你在绘制到设备DC的时候,也使用 TransparentBlt 函数
你说得很对,正是这个问题.......[/quote] 我4楼也给你说了,呵呵,别人帮你看问题,顶多说下思路,一般不会亲自去帮你调试,还需要你自己去试
  • 打赏
  • 举报
回复
引用 9 楼 draculamx 的回复:
你先调用 TransparentBlt,然后又调用 bitblt,虽然你用 TransparentBlt 绘制到内存DC上是透明的,但是后面如果用bitblt绘制到设备DC上的时候,是不会保留透明效果的。。。 除非你在绘制到设备DC的时候,也使用 TransparentBlt 函数
你说得很对,正是这个问题.......
draculamx 2014-07-22
  • 打赏
  • 举报
回复
你先调用 TransparentBlt,然后又调用 bitblt,虽然你用 TransparentBlt 绘制到内存DC上是透明的,但是后面如果用bitblt绘制到设备DC上的时候,是不会保留透明效果的。。。 除非你在绘制到设备DC的时候,也使用 TransparentBlt 函数
Chivalry 2014-07-21
  • 打赏
  • 举报
回复
BOOL TransparentBlt( int xDest, int yDest, int nDestWidth, int nDestHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, UINT clrTransparent ); // 此函数同样具有缩放功能,但此函数最后一个参数用来指定作为透明色的RGB; //把最后一个参数换成白色的RGB试试看
Chivalry 2014-07-21
  • 打赏
  • 举报
回复
调用完TransparentBlt,还用调用BitBlt么?
  • 打赏
  • 举报
回复
有没有人尝试过????多层CDC memDC双缓冲绘图下,如何使用TransparentBlt函数???
  • 打赏
  • 举报
回复
引用 1 楼 Idle_ 的回复:
1、memDC.FillRect(client,&BkBrush);//绘制背景 这个BkBrush不会就是白色吧? 2、MSDN said: The TransparentBlt function supports all formats of source bitmaps. However, for 32 bpp bitmaps, it just copies the alpha value over. 你TransparentBlt的不是32位bitmap吧?
你要注意,我说TransparentBlt透明不了,是在双缓冲绘图条件下的,如果不是双缓冲就可以透明的。
  • 打赏
  • 举报
回复
引用 1 楼 Idle_ 的回复:
1、memDC.FillRect(client,&BkBrush);//绘制背景 这个BkBrush不会就是白色吧? 2、MSDN said: The TransparentBlt function supports all formats of source bitmaps. However, for 32 bpp bitmaps, it just copies the alpha value over. 你TransparentBlt的不是32位bitmap吧?
你好,我的BKBrush不是白色的。 bitmap也不是32位带alpha 的。
dvlinker 2014-07-21
  • 打赏
  • 举报
回复
帮忙顶一个!
阿呆_ 2014-07-21
  • 打赏
  • 举报
回复
1、memDC.FillRect(client,&BkBrush);//绘制背景 这个BkBrush不会就是白色吧? 2、MSDN said: The TransparentBlt function supports all formats of source bitmaps. However, for 32 bpp bitmaps, it just copies the alpha value over. 你TransparentBlt的不是32位bitmap吧?
  • 打赏
  • 举报
回复
引用 5 楼 jimoguilai 的回复:
BOOL TransparentBlt( int xDest, int yDest, int nDestWidth, int nDestHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, UINT clrTransparent ); // 此函数同样具有缩放功能,但此函数最后一个参数用来指定作为透明色的RGB; //把最后一个参数换成白色的RGB试试看
这个函数使用是没问题的,但要在双缓冲绘图当中 透明而且不闪烁,谁能做到????

1,649

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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