我想在VC++中实现这样的一个效果:
一个对话框中贴着一个大背景图,我要让一个png格式的小图片在这个背景图上来回移动,实现若隐若现(即改变透明度)的效果,并且让这个png格式的小图片的透明区域部分不显示出来?大家知道怎么做吗?(100分)
---------------------------------------------
一定要同时实现这两种效果(1.透明区域不显示。2.不透明区域可以以任意透明度显示。),不能只实现单独的一种,不然我也能做得出来,呵呵~!请大家帮帮忙
一个对话框中贴着一个大背景图,我要让一个png格式的小图片在这个背景图上来回移动,实现若隐若现(即改变透明度)的效果,并且让这个png格式的小图片的透明区域部分不显示出来?大家知道怎么做吗?(100分)
---------------------------------------------
一定要同时实现这两种效果(1.透明区域不显示。2.不透明区域可以以任意透明度显示。),不能只实现单独的一种,不然我也能做得出来,呵呵~!请大家帮帮忙
---------------------
是背景不透明吧,你可以SetLayeredWindowAttributes,设置颜色透明。
2.不透明区域可以以任意透明度显示
-------------------------------
这个只有用算法处理小图片了
R(C)=R(A)*alpha+R(B)*(1-alpha)
G(C)=G(A)*alpha+G(B)*(1-alpha)
B(C)=B(A)*alpha+B(B)*(1-alpha)
---------------------------------------
如果用SetLayeredWindowAttributes也将背景的某些色彩去掉了,LZ可以不用,
直接在内存DC上先画背景,然后用透明度算法处理小图片像素,再将小图片贴到内存DC上,后在显示DC上一起贴出来另外,DirectDraw可以做出来,而且速度又快,不知LZ有无兴趣
如果追求速度,可以直接操作位图数据,把你的前景位图通过内存运算绘制到背景上,然后再把结果贴到界面上。
有没有更好的办法啊,比如直接调用一个函数什么的!