AlphaBlend变暗,仿QQ截图,有问题!

cdm2179 2011-02-16 03:26:34
BOOL CCatchScreenDlg::OnEraseBkgnd(CDC* pDC)
{
//用整个桌面填充全屏对话框背景
CRect rect;
GetClientRect(&rect);

CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(m_pBitmap);

memDC.PatBlt(0, 0, rect.Width(),rect.Height(), BLACKNESS);
BLENDFUNCTION blend;
blend.BlendOp = AC_SRC_OVER;
blend.BlendFlags = 0;
blend.AlphaFormat = 0;
blend.SourceConstantAlpha = 80;
pDC->AlphaBlend(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, rect.Width(), rect.Height(), blend);

return TRUE;
}

一开始确实有变暗的效果,但是画截图区域的时候,屏幕就越来越暗,最后就变成黑屏,求解?
...全文
352 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdm2179 2011-02-19
  • 打赏
  • 举报
回复
问题解决了,谢谢楼上的朋友,AlphaBlend是将源(src)与目标(des)进行混合,送分!
varding 2011-02-18
  • 打赏
  • 举报
回复
这个没用过,个人猜测:

AlphaBlend是将源(src)与目标(des)进行混合,你的源是memDC,目标是pDc
第一次是按照你的意思进行混合的,而第二次是用memDC里的黑色位图与上一次混合后的图进行了再次混合,所以你要保存最原始的桌面背景到bitmap里,混合的时候用这个原始图与黑色位图混合才行
renxu350 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cdm2179 的回复:]

没的,只是截取屏幕

那怎么弄呢?
[/Quote]

看了MSDN的说明,理论上需要ALPHA通道
cdm2179 2011-02-16
  • 打赏
  • 举报
回复
我感觉就是每刷新一次画背景,屏幕就暗一些,最后就黑屏了
cdm2179 2011-02-16
  • 打赏
  • 举报
回复
没的,只是截取屏幕

那怎么弄呢?
renxu350 2011-02-16
  • 打赏
  • 举报
回复
你截图的图片有没有ALPHA通道?

19,469

社区成员

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

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